2013-02-13 58 views
1

我想知道是否可以通過DataExtension添加Tab?傳遞給updateCMSFields的FieldList參數似乎將DataExtensions新字段輸出到Details選項卡上。所以我的第一次嘗試是在那裏把我的領域:通過DataExtension添加Tab Silverstripe3

public function updateCMSFields(FieldList $fields) { 
    $secureFilesTab = $fields; 
    $secureFilesTab->push(new HeaderField(_t('SecureFiles.GROUPACCESSTITLE', 'Group Access'))); 
    $secureFilesTab->push(new TreeMultiselectField('GroupPermissions', _t('SecureFiles.GROUPACCESSFIELD', 'Group Access Permissions'))); 
}  

這工作得很好,但是當我保存的值,則CMS裝載來自Tree_View和List_View選項卡上詳細信息選項卡中的數據。在下面的評論中提到的事實是,這是一個DataExtension for Folder。

我然後使用從FormScaffolder代碼添加新的選項卡嘗試:

public function UpdateCMSFields(FieldList $fields) { 
    $fields->push(new TabSet('Root', $secureFilesTab = new Tab('Security'))); 
$secureFilesTab->setTitle(_t('SiteTree.TABSECURITY', 'Security')); 
} 

這改變了標籤的圖標都到Tree_View圖標,並把所有標籤上我的新DataExtension領域。

什麼是通過DataExtension添加標籤的正確方法?

回答

3

您可以使用addFieldsToTab()將新字段添加到現有標籤或新標籤,就像在DataObjects上使用getCMSFields()時一樣。

public function updateCMSFields(FieldList $fields) { 
    if ($this->owner->ClassName != 'Folder'){ 
     $fields->addFieldsToTab('Root.Security', array(
      new HeaderField(_t('SecureFiles.GROUPACCESSTITLE', 'Group Access')), 
      new TreeMultiselectField('GroupPermissions', _t('SecureFiles.GROUPACCESSFIELD', 'Group Access Permissions')) 
     ));  
    } 
    if ($this->owner->ClassName == 'Folder'){ 
     $fields->push(new HeaderField(_t('IMAFOLDER', 'I am a folder')));  
    } 
} 

安全選項卡,如果找不到,將通過傳遞'Root.Security'作爲第一個參數來創建。點符號用於創建tabset和製表符的嵌套結構。因爲已經有了這樣一個標籤集,所以不可能簡單地推出一個具有相同名稱的新標籤集(「Root」)。如果您需要在選項卡上進一步操作,可以使用$ fields-> findOrMakeTab('TabSet.Tab')來訪問它們的實例,例如$ fields-> findOrMakeTab('Root.Content');

+0

我編輯了答案:代碼中存在拼寫錯誤(addFieldsToTab而不是addFieldsToTabs) – jfbarrois 2013-02-13 18:16:11

+0

感謝您花時間做出回覆。當我將Root.Security傳遞給addFieldsToTab時,出現以下錯誤:Error at framework/forms/FieldList.php line 295:FieldList :: addFieldToTab()試圖向對象'FieldList'添加一個標籤 - 'Root'不存在。有什麼想法嗎? – 2013-02-13 22:33:36

+0

我已經嘗試了上面兩個裝飾器的片段:一個用於頁面,另一個用於成員,並且在這兩種情況下,我都可以看到一個名爲security的新選項卡,以及預期的字段。也許你可以給我們更多的背景?你喜歡什麼裝飾?裝飾的DataObject是否依賴腳手架來構建其字段集(或者在添加更多字段定義之前執行parent :: getCMSFields())?似乎主要的Tabset Root並不是以某種方式構建的,所以上游的東西可能不正確? – jfbarrois 2013-02-14 00:37:58

1

我也有問題,使會員擴展選項卡,在功能上

public function updateCMSFields(FieldList $fields) 

最後它開始工作,我刪除後場訂購

$fields->changeFieldOrder($order); 

試試吧,也許它可以幫助你。

+0

這發生在我身上兩次。謝謝你的回答,它啓動了我的記憶。 – Chazadanga 2016-02-12 00:04:05