在继承的对象上重新排序/移动Silverstripe 3 CMS选项卡

时间:2017-05-28 20:17:41

标签: php silverstripe

搜索高低对应的答案,但似乎没有其他人拥有它或真正担心它。这是问题所在:

  • A类有一个getCMSFields()方法,它添加一个名为“Root.SEO”的标签,其中包含一些字段。
  • B类继承自A类,并且拥有自己的getCMSFields()方法,首先调用$ fields = parent :: getCMSFields()并将更多字段/制表符添加到$ fields。
  • SEO选项卡总是在B类中设置的任何内容之前,因为A类首先执行。但我希望它介于B类定义的两个标签之间

我尝试了$ fields-> removeByName('SEO'),他们手动重新添加了Class B中的标签。哪个会好的,但我似乎无法找到一种方法来获取SEO标签的内容,然后再删除它。所以我能做的最好的事情是正确定位一个没有A类字段的空SEO选项卡。

1 个答案:

答案 0 :(得分:4)

执行此操作的一种方法是删除SEO标签,然后在添加其他字段和标签后重新添加:

public function getCMSFields() {
    $fields = parent::getCMSFields();

    // Add fields here

    if ($seoTab = $fields->fieldByName('Root.SEO')) {
        $fields->removeFieldFromTab('Root', 'SEO');
        $fields->fieldByName('Root')->push($seoTab);
    }
}