2016-07-31 6 views
2

Ich habe eine SiteConfig Erweiterung eingerichtet (deklariert in Yml, getestet und bestätigt), durch die ich versuche, das Feld Title (das für Site title) in ein schreibgeschütztes Feld zu ändern.SilverStripe SiteConfig Titelfeldmanipulation

Ich weiß, dass in der Elternklasse SiteConfig das Title Feld in einer Variablen gespeichert ist. siteconfig Linie 85: $titleField = new TextField("Title", _t('SiteConfig.SITETITLE', "Site title"))

Also in meiner Erweiterung SiteConfigTweaks extends DataExtensions Ich habe versucht:

public function updateCMSFields(FieldList $fields) { 
    $titleField->performReadonlyTransformation(); 
} 

Aber der Trick nicht tun. Was fehlt mir hier?

+0

Das ist Ihr tatsächlicher Code? Das sollte ein Fehler sein, da '$ titleField' nicht definiert ist? – bummzack

+0

Sie haben Recht. lol – Faloude

Antwort

3

Ich schlage vor, Sie wie folgt vor:

public function updateCMSFields(FieldList $fields) 
{ 
    if ($titleField = $fields->dataFieldByName('Title')) { 
     $fields->replaceField(
      'Title', 
      $titleField->performReadonlyTransformation() 
     ); 
    } 
} 

Zuerst Sie die vorhandene Titel-Feld erhalten und auch für seine Existenz überprüfen. Dann ersetzen Sie das Feld durch seine schreibgeschützte transformierte Variante.

+0

Das funktioniert, danke bummzack. Kleine Folgefrage, da ich mehr über all diese Feldmanipulationsfunktionen lernen muss: Wie setze ich den Wert dieses Feldes auf 'DataObject :: get (" SomeObject ") -> first() -> SomeColumn'? Ich dachte, ich würde irgendwo 'setValue()' lesen, aber es gilt nicht für 'TextField'. – Faloude

+0

@Faloude 'TextField' ist ein Formularfeld. Felder eines DataObject haben den Typ 'DBField'. Es ist nicht das Gleiche. 'setValue' kann in Formularfeldern verwendet werden. Für DB-Felder benutzen Sie 'setField' am DataObject oder einfach normale Zuweisungen (zB. $ MyDataObject-> Field = 'value';') – bummzack

+0

Ach ja, mir ist der Unterschied bewusst, mein Ziel ist es, den Wert zu setzen von diesem schreibgeschützten Feld zu etwas, das aus der Datenbank extrahiert wird. Angenommen, ich möchte den Wert von 'titleField' in' 'Hallo Welt' ändern, wo soll ich' $ titleField-> setValue ('Hallo Welt') definieren ''? Später werde ich * Hello World * durch eine Zeichenkette ersetzen, die aus der DB – Faloude