2013-02-13 54 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