2016-04-19 23 views
-1

我試過這個,但無法輸出數據庫服務器中的現有數據。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的/代碼目錄)

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

您是否創建了一個頁面?你如何試圖顯示數據對象?看看我們的例子,你希望MyData成爲一個頁面,那麼你應該從Page_Controller擴展MyData和PageDataController –

+0

@Greg想要我想要做的就是擴展一個DataObject並將其顯示在頁面上,這是否有意義? –

+2

要在頁面上顯示DataObject,應該使用頁面中的關係,例如has_one或has_many。這取決於你想成爲你的'Data1'屬性。它可能是頁面本身的屬性。和'LatestMyData'方法可以在你的Page.ss中使用Page_ss(DataObject通常沒有控制器,併爲頁面提供數據) –

回答

2

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); 
    } 
} 

個模板/佈局/ 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>