SilverStripe 数据未显示在模板中
SilverStripe data not showing in the template
我试过了,但无法输出数据库服务器中的现有数据。
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);
}
}
templates/layout/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
函数:
templates/layout/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>
我试过了,但无法输出数据库服务器中的现有数据。
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);
}
}
templates/layout/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
函数:
templates/layout/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>