Silverstripe- 循环 many_many 关系中的所有项目
Silverstripe- Loop all items from many_many relationship
我正在尝试输出一组图标(来自一组 GuidePages),我总是想在其中显示 5 个图标,但需要能够 select 哪些适用于此特定图标页。
在我想要显示它们的页面中,我正在做的是:
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));
很好,我可以 select 图标,但它显然只会输出我 select 编辑的实际图标(即 3 个而不是全部 5 个)。
我正在尝试找到一种始终显示 5 的方法,但能够 select 应用的少数几个并在模板中循环所有这些(将活动 class 添加到selected 个)。
它不一定需要是 many_many 或 2 组页面之间的任何关系,如果有另一种更简单的方法来做到这一点...即只需将值放入 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 %>
我正在尝试输出一组图标(来自一组 GuidePages),我总是想在其中显示 5 个图标,但需要能够 select 哪些适用于此特定图标页。
在我想要显示它们的页面中,我正在做的是:
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));
很好,我可以 select 图标,但它显然只会输出我 select 编辑的实际图标(即 3 个而不是全部 5 个)。
我正在尝试找到一种始终显示 5 的方法,但能够 select 应用的少数几个并在模板中循环所有这些(将活动 class 添加到selected 个)。
它不一定需要是 many_many 或 2 组页面之间的任何关系,如果有另一种更简单的方法来做到这一点...即只需将值放入 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 %>