【问题标题】:Silverstripe- Loop all items from many_many relationshipSilverstripe- 循环来自 many_many 关系的所有项目
【发布时间】:2019-04-25 20:55:22
【问题描述】:

我正在尝试输出一组图标(来自一组 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 或其他东西......

【问题讨论】:

标签: php silverstripe silverstripe-4


【解决方案1】:

最终选择:

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 %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    相关资源
    最近更新 更多