SilverStripe数据未显示在模板中

时间:2016-04-19 22:28:39

标签: php silverstripe

我试过了,但无法在我的数据库服务器中输出现有数据。

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刷新缓存,但仍然没有输出。有人知道出了什么问题吗?

1 个答案:

答案 0 :(得分:2)

LatestMyData函数应该在Page_Controller而不是MyData_Controller,因为这是页面模板将调用的控制器。

还需要以某种方式在CMS中控制MyData对象。这可以通过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);
    }
}

<强>模板/布局/ 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>