php - Silverstripe-循环many_many关系中的所有项目

标签 php silverstripe silverstripe-4

我正在尝试输出一组图标(来自一组 GuidePages),我总是想显示 5 个图标,但需要能够选择哪些图标适用于该特定页面。

enter image description here

在我想要显示它们的页面中,我正在执行以下操作:

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

关于php - Silverstripe-循环many_many关系中的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55857490/

相关文章:

PHP:动态 URL 问题

php - 结合托管在 Web 服务器上的 PHP 和 jQuery 来使用 POST 函数提交表单?

php - 银条 4 : Where is the database configuration?

php - 未为类设置 Silverstripe table_name

php - 在前端表单 Silverstripe 4.0 中使用 UploadField 上传图像

php - AS3 共享对象未正确刷新和 XML/PHP

PHP倒计时日期

silverstripe - 在 Controller 扩展中提交表单 - SilverStripe 3.4.0

Uploadfield 上的 Silverstripe 自定义验证器

php - Silverstripe tinyMCE 添加自定义插件