每个页面上的新 GridField 项目 - SilverStripe

New GridField item on each page - SilverStripe

我正在尝试使用 GridField 来允许 CMS 用户将信息(邮件列表)添加到同一页面类型(节目)的文章中,但是创建的每个新页面都已经填充了以前文章中的信息。

我认为这可能与我在 Shows 页面类型和 Mailing List DataObject 之间建立关系的方式有关,但我无法弄清楚每个新的展示页面需要做什么拥有自己的空白 GridField,因为每个节目的邮件列表都不相同...

我在这两个文件上尝试了 $has_one、$has_many 和 $many_many 的多种组合,但没有任何东西能按照我需要的方式工作,这是为了每个显示页面都有自己的 GridField(邮件列表)...

我现在的密码是:

Shows.php

private static $has_many = array(
    'MailingLists' => 'MailingList'
);

...

$config = GridFieldConfig_RelationEditor::create();

$gridField = new GridField('MailingList',
       'Shows Mailing List',
       new DataList('MailingList'),
       $config
);

$fields->addFieldsToTab('Root.Content.MailingList', array(
     $gridField
));

MailingList.php

class MailingList extends DataObject {

    private static $db = array(
        'Title' => 'Varchar(25)',
        'Description' => 'Varchar(55)'
    );

    private static $has_one = array(
        'Shows' => 'Shows'
    );
}

使用此代码

$gridField = new GridField('MailingList',
   'Shows Mailing List',
   new DataList('MailingList'),
   $config
);

您 select 邮件列表 table 中的所有记录 new DataList('MailingList'),但您应该使用 $this->MailingLists()

的相关记录列表
$gridField = new GridField('MailingList',
   'Shows Mailing List',
   $this->MailingLists(),
   $config
);