2016-04-04 48 views
1

我想使用GridField來允許CMS用戶將信息(郵件列表)添加到相同頁面類型的文章(顯示),但是每個創建的新頁面都已填充信息從以前的文章。每個頁面上的新GridField項目 - SilverStripe

我認爲這可能與我設置Shows頁面類型和郵件列表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' 
    ); 
} 

回答

3

有了這個代碼

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

您選擇郵件列表表中的所有記錄與new DataList('MailingList'),但你應該使用的記錄相關列表與$this->MailingLists()

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

哦。我的。神!我有一天嘗試了這一點,並得到了服務器錯誤,這就是爲什麼我恢復使用新的DataList()...你能解釋它爲什麼這次工作? $ this-> MailingLists()是否鏈接到$ has_many位? 感謝您的幫助:) – Freemium

+0

是'$ this-> MailingLists()'鏈接到'$ has_many''MailingLists'關係。 – 3dgoo

+0

這是很好的知道,我必須嘗試使用​​'$ this-> MailingLists()',而我有關係設置爲'$ has_one'這就是爲什麼它不適合我,我認爲這不是什麼問題是。感謝您清除 – Freemium

相關問題