Я хотел бы начать с того, что я новичок в разработке Silver Stripe и PHP/MySQL в целом, поэтому, пожалуйста, будьте добрыми.Доступ к Silverstripe has_many из отдельного типа страницы
У меня есть сайт, который требует, чтобы у меня была страница с ценой, в которой отображаются планы ценообразования компании как на странице цены (duh), так и на домашней странице. Таким образом, цель состоит в том, чтобы иметь доступ к данным из моего типа Pricing.php
с моим HomePage.ss
.
Я пытаюсь сделать это в будущем доказательства, насколько это возможно, поэтому я создал ServicePlan.php
, который расширяет DataObject и использует FieldList
создать ценовые рекорды и связать их с типом Pricing
страницы с помощью отношения $has_many
и $has_one
. Основываясь на моих ограниченных знаниях, это кажется лучшим способом достичь этого.
Вот код, который я написал для этого.
ServicePlan.php
class ServicePlan extends DataObject {
private static $db = array (
'PlanColor' => 'Varchar',
'PlanName' => 'Varchar',
'PlanPrice' => 'Varchar',
'PlanRenewal' => 'Varchar',
);
private static $has_one = array (
'Pricing' => 'Pricing'
);
private static $summary_fields = array (
'PlanName' => 'Name of Plan',
'PlanPrice' => 'Price',
'PlanRenewal' => 'Renewal Period',
);
public function getCMSFields() {
$fields = FieldList::create(
TextField::create('PlanName'),
TextField::create('PlanRenewal'),
TextField::create('PlanPrice'),
TextField::create('PlanColor')
);
return $fields;
}
public function getServicePlans() {
return $this->Pricing();
}
Pricing.php
class Pricing extends Page {
private static $has_many = array (
'ServicePlans' => 'ServicePlan',
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldsToTab('Root.Plans', GridField::create(
'ServicePlans',
'Orenda Force Service Plan Information',
$this->ServicePlans(),
GridFieldConfig_RecordEditor::create()
));
return $fields;
}
}
class Pricing_Controller extends Page_Controller {
}
HomePage.php
class HomePage extends Page {
}
class HomePage_Controller extends Page_Controller {
public function ServiceTeasers($count = 2) {
$holder = ServicesHolder::get()->First();
return ($holder) ? ServicesPage::get()->limit($count) : false;
}
public function MembershipPlans() {
$Pricing = Pricing::get();
return $plan;
}
}
Layout/HomePage.ss
...//
<% loop $MembershipPlans %>
<div class="col-1-3 card pricing">
<div class="pricing__header primary $PlanColor">
<p class="pricing__plan-name">$PlanName</p>
<p class="pricing__price">$PlanPrice<sub>$PlanRenewal</sub></p>
</div>
<div class="card__contents">
<h3 class="title-06">Plan details</h3>
<ul>
<li>unlimited training</li>
<li>individual nutrition/meal plans</li>
</ul>
</div>
</div>
$Content
<% end_loop %>
...//
Я не имею никаких проблем с доступом содержание
Layout/Pricing.ss
<section class="body pricing">
<div class="content">
<h2 class="title-02 text-monochrome">Pricing</h2>
<% loop $ServicePlans %>
<div class="col-1-3 card pricing">
<div class="pricing__header $PlanColor">
<p class="pricing__plan-name">$PlanName</p>
<p class="pricing__price">$PlanPrice<sub>$PlanRenewal</sub></p>
</div>
<div class="card__contents">
<h3 class="title-06">Plan details</h3>
<ul>
<li>unlimited training</li>
<li>individual nutrition/meal plans</li>
</ul>
</div>
</div>
<% end_loop %>
</div>
</section>
Я очень признателен за любую помощь, которую вы можете Предоставляю, я пытался понять это на пару дней, и я снова и снова сталкивался с кирпичной стеной. Что я делаю не так?
This question самый близкий, который я получил, и он, похоже, не разрешил мою проблему. Должен ли я переместить FieldList
на страницу Pricing.php
?
БУМ! Это сработало ОТЛИЧНО! – Dom
@ пользователь4765523 BOOM! вы должны пометить ответ как правильный, чтобы решить эту проблему! –
Упс, наверное, я забыл ... – Dom