【发布时间】:2016-03-24 02:30:29
【问题描述】:
我的DashboardPage 与我的PastEvent 数据对象有一个$has_many 关系。在我的 DashboardPage.ss 模板中,我希望能够遍历所有 PastEvents。我相信由于 $has_many 关系,我应该能够在 DashboardPage.ss 模板上执行以下操作:
DashboardPage.ss
<% loop $PastEvents %>
<div>
<div>$EventName</div>
<div>$ClassType</div>
etc...
</div>
<% end_loop %>
但是什么都没有显示。我错过了什么?
DashboardPage.php
<?php
class DashboardPage extends Page implements TemplateGlobalProvider {
private static $db = array(
'Testing' => 'Varchar(255)'
);
private static $has_many = array(
'PastEvents' => 'PastEvent'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->removeByName('Content');
return $fields;
}
public static function get_template_global_variables() {
return array('DashboardLink' => 'getDashboardLink');
}
public static function getDashboardLink($action='') {
$page = DashboardPage::get()->first();
return $page ? $page->Link($action) : '';
}
}
class DashboardPage_Controller extends Page_Controller {
private static $allowed_actions = array(
'show'
);
public function init() {
parent::init();
Requirements::css('themes/' . SSViewer::current_theme() . '/owl-carousel/owl.carousel.css');
Requirements::css('themes/' . SSViewer::current_theme() . '/owl-carousel/owl.theme.css');
Requirements::css('themes/' . SSViewer::current_theme() . '/owl-carousel/owl.transitions.css');
}
public function show(){
dd('Coming here');
}
}
PastEvent.php
<?php
class PastEvent extends DataObject {
private static $db = array(
'EventName' => 'Varchar(255)',
'ClassType' => 'Varchar(255)',
'Instructor' => 'Varchar(255)',
'EmbedCode' => 'Text',
'EventDate' => 'Date',
'Time' => 'Time'
);
private static $has_one = array(
'BranchLocation' => 'BranchLocation',
'DashboardPage' => 'DashboardPage'
);
private static $summary_fields = array(
'EventName' => 'EventName',
'BranchLocation.Name' => 'Branch Location',
'ClassType' => 'ClassType',
'Instructor' => 'Instructor',
'EventDate' => 'Event Date',
'Time' => 'Time',
);
public function getCMSFields() {
$fields = new FieldList(
TextField::create('EventName'),
TextField::create('ClassType'),
TextField::create('Instructor'),
DropdownField::create(
'BranchLocationID',
'Branch Location',
BranchLocation::get()->map('ID', 'Name')->toArray()
),
TextareaField::create('EmbedCode'),
DateField::create('EventDate')->setConfig('showcalendar', true)->setDescription('Click inside textbox to open calender'),
TimePickerField::create('Time')
);
return $fields;
}
public function Link() {
return $this->DashboardPage()->Link('show/'.$this->ID);
}
}
【问题讨论】:
-
ifusion,你是如何设置 DashboardPage 和 PastEvent 的关系的?
-
@muskie9 - DashboardPage 的 PastEvent 对象上有一个 $has_one,DashboardPage 上有一个 $has_many
$PastEvents => $PastEvent -
@ifusion 你在哪里添加
PastEvents 到DashboardPage来决定PastEvents 与DashboardPage有什么关系?
标签: silverstripe