每页上的新GridField项 - SilverStripe

时间:2016-04-04 15:45:10

标签: silverstripe

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

我认为这可能与我设置显示页面类型和邮件列表数据对象之间的关系的方式有关,但我无法弄清楚我需要为每个新的显示页面做些什么它是自己的空白GridField,因为每个节目的邮件列表都不一样......

我尝试过$ has_one,$ has_many&的许多组合。 $ many_many关于这两个文件,但没有任何东西让它按照我需要的方式运行,每个Show页面都有自己的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'
    );
}

1 个答案:

答案 0 :(得分:3)

使用此代码

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

使用new DataList('MailingList')选择MailingList表中的所有记录,但是您应该使用$this->MailingLists()的相关记录列表

$gridField = new GridField('MailingList',
   'Shows Mailing List',
   $this->MailingLists(),
   $config
);