我正在尝试输出一组图标(来自一组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的方法,但是能够选择一些适用的方法并将其全部循环到模板中(将活动的类添加到所选的类中)。
如果有另一种更简单的方法,也不一定需要在两个页面集之间建立多次关系或任何关系……即只需将值放入DataList或其他内容中……
答案 0 :(得分:2)
最终与:
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 %>