我试过了,但无法在我的数据库服务器中输出现有数据。
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
刷新缓存,但仍然没有输出。有人知道出了什么问题吗?
答案 0 :(得分:2)
LatestMyData
函数应该在Page_Controller
而不是MyData_Controller
,因为这是页面模板将调用的控制器。
还需要以某种方式在CMS中控制MyData
对象。这可以通过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);
}
}
<强>模板/布局/ Page.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
函数:
<强>模板/布局/ Page.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>