【问题标题】:Showing records from Database table to a page template SilverStripe将数据库表中的记录显示到页面模板 SilverStripe
【发布时间】:2015-01-24 15:40:54
【问题描述】:

我是 SilverStripe 的新手,这就是为什么,面临这么多问题。我想从表中检索数据并在页面模板中显示它们。我创建了一个模型管理员,我可以从那里插入记录,但我不知道如何检索这些数据并在页面模板中显示它们?基本上我的代码如下......

mysite/code/SerialsCollection.php

<?php

class SerialsCollection extends DataObject {

    private static $db = array(
        'Title' => 'Varchar',
        'Author' => 'Varchar',
        'Publisher' => 'Varchar',
        'PublicationYear' => 'Date',

    );

    private static $searchable_fields = array(
      'Title',
      'Author'
   );


   private static $field_labels = array(
      'Title' => 'Title' // renames the column to "Cost"
   );

   private static $summary_fields = array(
      'Title',
      'Author',
      'Publisher',
      'PublicationYear',
   );

    public function canView($member = null) {
        return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
    }

    public function canEdit($member = null) {
        return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
    }

    public function canDelete($member = null) {
        return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
    }

    public function canCreate($member = null) {
        return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
    }
}

and mysite/code/SerialsCollectionAdmin.php ... 
<?php

class SerialsCollectionAdmin extends ModelAdmin {

    private static $managed_models = array(
        'SerialsCollection'
    );

    private static $url_segment = 'serials-collection';

    private static $menu_title = 'Serials Collection';

    public function getList() {
        $list = parent::getList();

        return $list;
    }

now, I am able to insert new records, view all and edit particular record. But what i want to create a page template and show these records on that page. I have tried it this way....

mysite/code/SerialsCollectionPage.php

<?php
Class SerialsCollectionPage extends Page{

}
Class Serials_Collection_Page_Controller extends Page_controller{
    public function SerialsCollections() 
    { 

        return DataObject::get("SerialsCollection"); 
    }
}
themes/SLIS/templates/SerialsCollectionPage.ss

<% include Header %>
<div id="Content">
        <h1>This is SerialsCollection Page</h1>
    <% control SerialsCollection %>

        <p>Title: $Title</p>
        <p>Author: $Author</p>
        <p>Publication Year:$PublicationYear</p>

    <% end_control %>

    </div>
<% include Footer %>

但只有当我在页面上的内容中写入一些内容时,我才得到什么,然后内容就来了。 任何帮助将不胜感激。

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

    Page_Controller:

    如果 SerialsCollection 只有一个实例,请确保单独获取该实例,并确保使用 get 函数:

    public function getSerials(){
        return SerialsCollection::get()->First();// for one item
        return SerialsCollection::get();//for an array (use only one of those)
    }
    

    单独的 get() 将返回一个你必须循环的集合 (ArrayList)

    模板中 如果您使用第一个(一项):

    $Serials.Title 
    

    将打印标题或者如果您使用了数组:

    <% loop $Serials %>
        $Title
    <% end_loop %>
    

    【讨论】:

      【解决方案2】:

      http://doc.silverstripe.org/en/developer_guides/model/data_model_and_orm/读取查询数据。

      在您的情况下,您将从数据对象中获取数据:

      $sc = SerialsCollection::get();

      您还应该阅读以下内容:http://doc.silverstripe.org/en/developer_guides/model/lists/

      【讨论】:

      • 感谢您的回答,我现在仍然面临这个问题....正如您在主题/SLIS/templates/SerialsCollectionPage.ss 部分中看到的那样,该页面仍然有一个静态标题

        这是连续剧集页面

        ,但我什么也看不到。我只是看看我是否从管理员文本编辑器中输入了动态内容。我已经创建了一个自定义主页模板,并且它运行良好,但是当我创建像 Serials Collection Page 这样的自定义页面模板时,它不工作我不知道为什么..
      • 也许您应该将您的连续剧收藏页面和模板源也添加到您的问题中。会有很大帮助。至于快速提示,您是否记得在添加文件时使用 ?flush 或 ?flush=all。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2020-10-30
      • 2015-05-09
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 2013-09-11
      相关资源
      最近更新 更多