簡體   English   中英

如何在Silverstripe中的頁面模板中顯示many_many對象

[英]How to display many_many objects in page template in Silverstripe

我們的網站有一個名為“TrailNotice”的對象,它與頁面類型“TrailSection”有很多關系。

class TrailNotice extends DataObject {

  private static $many_many = array(
    'TrailSections' => 'TrailSection'
  );

這允許通過CMS中的復選框在多個TrailSections中應用單個TrailNotice:

$fields->addFieldToTab('Root.Main', new CheckboxSetField('TrailSections', 'Applies to which trail sections?', DataObject::get('TrailSection')->map('ID', 'Title')));

如何在TrailSection頁面控制器中顯示附加到TrailSection的TrailNotices?

我從以下代碼開始:

class TrailSection_Controller extends Page_Controller {

  public function TrailNotices(){
    $TrailNotices = DataObject::get('TrailNotice');
    return $TrailNotices;
  }

但這將獲得所有TrailNotice對象。 如何過濾它們以便只顯示附加到TrailSection的TrailNotices?

您需要在兩種方式上定義many_many,然后您可以從兩側訪問它。 一方有$many_many

class TrailNotice extends DataObject {

  private static $many_many = array(
    'TrailSections' => 'TrailSection'
  );

另一方面,你必須定義$belongs_many_many

class TrailSection extends DataObject {

  private static $belongs_many_many = array(
    'TrailNotices' => 'TrailNotice'
  );

然后在您的模板中,您可以調用關系列表並循環遍歷它:

<% loop $TrailNotices %>
    $Title
<% end_loop %>

看到 資料圖 所有可能的關系(感謝@nightjar提供圖形)。

你必須在你的TrailSection模型中實現$ belongs_many_many,類似的東西:

class TrailSection extends DataObject {

  private static $belongs_many_many = array(
    'TrailNotices' => 'TrailNotice'
  );

}

然后你可以簡單地將$ TrailNotices循環到TrailSection.ss模板中,而不對你的控制器做任何事情:

<% loop $TrailNotices %>
    $Title<br>
<% end_loop %>

您可以在Stephen的鏈接Dataobject Relationship Management中查看Mentor示例

SilverStripe存儲many_many關系RelationList ,可以使用$this->RelationName() (在本例中$this->data()->TrailNotices() )訪問對象。 RelationList是DataList的子類,因此您可以像處理列表的DataObject::get()一樣對待它。

class TrailSection_Controller extends Page_Controller {

  public function TrailNotices(){
    $TrailNotices = $this->data()->TrailNotices();
    return $TrailNotices;
  }

有關SilverStripe的ORM和DataObject關系的更多信息,請參閱幫助部分Dataobject關系管理和(更新的內容) SilverStripe課程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM