将Tab添加到数据扩展Silverstripe 3

时间:2013-02-13 16:20:24

标签: silverstripe

我想知道是否可以通过DataExtension添加Tab?传递给updateCMSFields的FieldList参数似乎将DataExtensions新字段输出到Details选项卡上。所以我的第一次尝试是将我的菲尔兹推到那里:

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选项卡中的数据加载到Details选项卡上。下面的评论中提到的是这是一个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添加标签的正确方法是什么?

2 个答案:

答案 0 :(得分: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”)的新tabset,因为已经存在这样的tabset。如果您需要对选项卡进行进一步操作,可以使用$ fields-> findOrMakeTab('TabSet.Tab')访问他们的实例,即$ fields-> findOrMakeTab('Root.Content');

答案 1 :(得分:1)

我也有问题在功能

中启用成员扩展中的标签
public function updateCMSFields(FieldList $fields)

最后,我删除了字段顺序后开始工作

$fields->changeFieldOrder($order);
试试吧,也许它可以帮助你。