Reorder/Move 继承对象上的 Silverstripe 3 CMS 选项卡
Reorder/Move Silverstripe 3 CMS tabs on inherited objects
到处搜索这个问题的答案,但似乎没有其他人拥有它或真的担心它。这是问题所在:
- Class A 有一个 getCMSFields() 方法,它添加了一个名为“Root.SEO”的选项卡,其中包含一些字段。
- Class B 继承自 Class A 并拥有自己的 getCMSFields() 方法,该方法首先调用 $fields = parent::getCMSFields() 并进一步添加 fields/tabs到 $fields.
- SEO 选项卡总是在 Class B 中设置的任何内容之前,因为 Class A 首先执行。但我希望它位于 Class B
定义的两个选项卡之间
我尝试了 $fields->removeByName('SEO') 并且他们手动重新添加了 Class B 中的选项卡。这很好,但我似乎无法找到一种方法来在删除 SEO 选项卡之前获取它的内容。所以我能做的最好的就是正确定位一个空的 SEO 选项卡,其中没有来自 Class A.
的字段
一种方法是删除 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);
}
}
到处搜索这个问题的答案,但似乎没有其他人拥有它或真的担心它。这是问题所在:
- Class A 有一个 getCMSFields() 方法,它添加了一个名为“Root.SEO”的选项卡,其中包含一些字段。
- Class B 继承自 Class A 并拥有自己的 getCMSFields() 方法,该方法首先调用 $fields = parent::getCMSFields() 并进一步添加 fields/tabs到 $fields.
- SEO 选项卡总是在 Class B 中设置的任何内容之前,因为 Class A 首先执行。但我希望它位于 Class B 定义的两个选项卡之间
我尝试了 $fields->removeByName('SEO') 并且他们手动重新添加了 Class B 中的选项卡。这很好,但我似乎无法找到一种方法来在删除 SEO 选项卡之前获取它的内容。所以我能做的最好的就是正确定位一个空的 SEO 选项卡,其中没有来自 Class A.
的字段一种方法是删除 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);
}
}