簡體   English   中英

Silverstripe- 循環來自 many_many 關系的所有項目

[英]Silverstripe- Loop all items from many_many relationship

我正在嘗試輸出一組圖標(來自一組 GuidePages),我總是想在其中顯示 5 個圖標,但需要能夠選擇哪些圖標適用於該特定頁面。

在此處輸入圖片說明

在我想顯示它們的頁面中,我正在做:

private static $many_many = array(
        'GuidePages' => GuidePage::class
    );

$source = GuidePages::get()->map('ID', 'Name');
$fields->addFieldToTab('Root.Main',CheckboxSetField::create('GuidePages','Select guide which apply', $source));

這很好,我可以選擇圖標,但它顯然只會輸出我選擇的實際圖標(即 3 個而不是全部 5 個)。

我試圖找到一種始終顯示 5 的方法,但能夠選擇少數幾個應用並在模板中循環所有這些(將活動類添加到選定的類)。

如果有另一種更簡單的方法來做到這一點,它不一定需要是 many_many 或兩組頁面之間的任何關系......即只需將值放入 DataList 或其他東西......

結束了:

public function getCMSFields()
{
    $fields = parent::getCMSFields();
    $source = GuidePage::get()->map('ID', 'Name');        
    $fields->addFieldToTab('Root.Main', CheckboxSetField::create('GuidePages', 'Select guides which apply', $source));
    return $fields;
}

public function getAllGuidePages()
{
  $out = [];
  $source   = GuidePage::get();
  $selected = $this->GuidePages()->getIDList();
  foreach ($source as $page) {
    $out[] = [
        'Class' => (in_array($page->ID, $selected)) ? 'active' : '',
        'Name'  => $page->Name(),
        'Icon'  => $page->PageIcon()->Link(),
    ];
  }
  return ArrayList::create($out);
}

並在模板中

<% loop getAllGuidePages %>
    <div class="$Class">
        <img src="$Icon">
        $Name
    </div>
<% end_loop %>

暫無
暫無

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

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