2017-05-28 38 views
2

爲此回答高低搜索,但似乎沒有其他人擁有它或真的擔心它。問題如下:對繼承對象重新排序/移動Silverstripe 3 CMS選項卡

  • A類有一個getCMSFields()方法,該方法添加一個名爲「Root.SEO」的選項卡,其中包含一些字段。
  • B類繼承自A類,並有一個它自己的getCMSFields()方法,它首先調用$ fields = parent :: getCMSFields()並將更多的字段/選項卡添加到$字段。
  • SEO標籤總是在B類中設置的任何東西之前,因爲A類首先執行。但我希望它是在B類定義的兩個標籤之間的某處

我試過$ fields-> removeByName('SEO'),他們重新手動添加B類標籤。這將是很好,但我似乎無法找到一種方法來獲得SEO標籤的內容,然後再刪除它。所以,我能做的最好的是正確定位的空SEO標籤沒有從A級領域做到這一點

回答

1

一種方法是增加我們的其他字段和標籤後去除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); 
    } 
}