【问题标题】:SilverStripe Tab CustomizationSilverStripe 选项卡自定义
【发布时间】:2014-04-08 08:34:17
【问题描述】:

在 SilverStripe 的 CMS 中,我想删除页面中的 Content 选项卡。我可以这样做:

$fields->removeFieldsFromTab('Root.Content.Main', 'Content');

然后我想创建自己的自定义标签:

$fields->addFieldToTab('Root.Content.MyTab', $myField);

但是,通过添加我自己的自定义选项卡,它会返回 Content 选项卡。

另一个选项就是将MyTab 设为默认的“向上”标签。这可能吗?

【问题讨论】:

    标签: tabs content-management-system silverstripe


    【解决方案1】:

    银条 2.4

    在 SilverStripe 2.4 中删除 Content 选项卡:

    $fields->removeFieldFromTab('Root.Content', 'Main');
    

    并将字段添加到名为 MyTab 的选项卡:

    $fields->addFieldToTab('Root.Content.MyTab', $myField);
    

    银条 3.1

    删除 SilverStripe 3.1 中的 Content 标签:

    $fields->removeFieldFromTab('Root', 'Main');
    

    并将字段添加到名为MyTab 的选项卡:

    $fields->addFieldToTab('Root.MyTab', $myField);
    

    注意事项

    删除Content 标签意味着您无法控制页面标题。

    removeFieldsFromTab 会从 Tab/TabSet 中的此 FieldList 中删除多个字段。它接受一个字段名称数组作为第二个参数。

    removeFieldFromTab 会从 Tab/TabSet 中的 FieldList 中删除单个字段。它采用字符串字段名称作为第二个参数。

    在您的情况下,您想使用removeFieldFromTab 而不是removeFieldsFromTab

    【讨论】:

    • 谢谢...当我使用 $fields->removeFieldFromTab('Root.Main', 'Content');它删除了“内容”所见即所得的文本编辑器,而不是“内容”选项卡。另外当我 $fields->addFieldToTab('Root.MyTab', $myField);它不会添加新标签!
    • addFieldToTab 应该创建一个新标签,如果它不存在,除非路径错误,或者您也可以尝试fieldByName('Root')->addFieldToTab('NewTab', $myField)。尝试removeFieldFromTab('Root', 'Main') 删除内容选项卡。
    • 对不起,我误会了。我以为你想删除内容字段,而不是内容选项卡。我已经更新了我的答案,以按照@colymba 的建议删除“内容”选项卡(谢谢)。我还添加了 Silverstripe 2.4 的代码,以防这是您正在使用的版本。
    【解决方案2】:

    我知道这个问题很老,但我遇到了同样的问题,我已经解决了。

    在我写的 getCMSFields() 方法中

    $fields = parent::getCMSFields();
    $fields->removeByName('XXX'); //this line removes tab
    return $fields;
    

    其中“XXX”是我的标签“Root.XXX”的名称

    我希望它会帮助别人。

    【讨论】: