2017-05-28 7 views
2

Gesucht hoch und niedrig für die Antwort auf diese, aber es scheint niemand sonst hat es oder sich wirklich darum sorgen. Hier ist das Problem:Reorder/Move Silverstripe 3 CMS Tabs auf geerbte Objekte

  • Klasse A hat eine getCMSFields() -Methode, die einen Tab namens "Root.SEO" mit einigen Feldern hinzugefügt.
  • Klasse B erbt von Klasse A und verfügt über eine eigene Methode getCMSFields(), die zuerst $ fields = parent :: getCMSFields() aufruft und weitere Felder/Tabs zu $ ​​-Feldern hinzufügt.
  • SEO Registerkarte ist immer vor allem in Klasse B eingestellt, wie Klasse A zuerst ausgeführt wird. Aber ich möchte, dass es irgendwo zwischen zwei durch Klasse B definierten Registerkarten liegt.
  • Ich versuchte $ Felder-> removeByName ('SEO') und sie wieder Hinzufügen der Registerkarte in Klasse B manuell. Was wäre in Ordnung, aber ich finde keinen Weg, den Inhalt des SEO-Tabs zu finden, bevor ich ihn entferne. Also das Beste, was ich tun kann, ist richtig eine leere SEO Tab ohne Felder aus der Klasse A. Position

    Antwort

    1

    Eine Möglichkeit, dies zu tun, ist die SEO Registerkarte entfernen und fügen Sie ihn zurück in nach anderen Feldern und Registerkarten hinzufügen:

    public function getCMSFields() { 
        $fields = parent::getCMSFields(); 
    
        // Add fields here 
    
        if ($seoTab = $fields->fieldByName('Root.SEO')) { 
         $fields->removeFieldFromTab('Root', 'SEO'); 
         $fields->fieldByName('Root')->push($seoTab); 
        } 
    } 
    
    Verwandte Themen