我尝试过,但无法输出数据库服务器中的现有数据。
Page.ss(布局目录)
<div class="content-container unit size3of4 lastUnit">
<article>
<div>
<% loop $LatestMyData %>
$Data1
<% end_loop %>
</div>
<div class="content">$Content</div>
</article>
$Form
$CommentsForm
</div>
MyData.php(mysite/code目录)
class MyData extends DataObject {
private static $db = array(
'Data1' => 'Varchar(30)'
);
}
class MyData_Controller extends Controller {
public function LatestMyData($count = 1) {
return MyData::get()
->limit($count);
}
}
我尝试用/dev/build
构建数据库,用?flush=all
刷新缓存,但仍然没有输出。有人知道出了什么问题吗?
LatestMyData
函数应该在Page_Controller
而不是MyData_Controller
中,因为这是页面模板将调用的控制器。
MyData
对象也需要在CMS中以某种方式进行控制。这可以通过与页面有关系的ModelAdmin或GridField来完成。
以下是一个工作示例,显示了使用Page
和DataItem
:之间的一对多关系来实现这一点的一种方法
DataItem.php
class DataItem extends DataObject {
private static $db = array(
'Title' => 'Varchar(30)'
);
private static $has_one = array(
'Page' => 'Page'
);
}
Page.php
class Page extends SiteTree {
private static $has_many = array(
'DataItems' => 'DataItem'
);
public function getCMSFields()
{
$fields = parent::getCMSFields();
$dataItemsField = GridField::create(
'DataItems',
'Data Items',
$this->DataItems(),
GridFieldConfig_RecordEditor::create()
);
$fields->addFieldToTab('Root.DataItems', $dataItemsField);
return $fields;
}
}
class Page_Controller extends ContentController {
function LatestDataItems($limit = 1) {
return $this->DataItems()->limit($limit);
}
}
模板/布局/页面.ss
<div class="content-container unit size3of4 lastUnit">
<article>
<div>
<% loop $LatestDataItems %>
$Title
<% end_loop %>
</div>
<div class="content">$Content</div>
</article>
$Form
$CommentsForm
</div>
如果我们只想要第一个DataItem
对象,我们可以调用$DataItems.First
,而不是我们的LatestDataItems
函数:
模板/布局/页面.ss
<div class="content-container unit size3of4 lastUnit">
<article>
<% if $DataItems.First %>
<% with $DataItems.First %>
<div>
$Title
</div>
<% end_with %>
<% end_if %>
<div class="content">$Content</div>
</article>
$Form
$CommentsForm
</div>