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来完成。

以下是一个工作示例,显示了使用PageDataItem:之间的一对多关系来实现这一点的一种方法

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>