Feldname an Callback übergeben

Aus Contao Community Documentation

Version vom 3. März 2010, 12:39 Uhr von Staen (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Wenn ich ich viele Felder in meinem Backend-Formular per load_callback oder save_callback manipulieren will, müsste ich eigentlich für jedes Feld eine eigene Callback-Funktion schreiben. Wenn ich aber in jedem Fall prinzipiell die selbe Manipulation vornehme (z.B. die Daten statt aus der Datenbank woanders einzulesen), ist es sinnvoller, immer die selbe Funktion zu nutzen. Leider übergibt TYPOlight diesem callback aber nicht den Feldnamen.

Dank der PHP Methode "__call" kann ich aber der Klasse diese Möglichkeit nachrüsten:

  
  /**
   * Automatic callback functions for every field
   * loads or saves the values   
   */     
  public function __call($name,$args) {
    list($type,$field) = explode('_',$name,2);
    switch($type) {
      case 'load': 
        return $this->load_field($field,$args[0]);
        break;
      case 'save':
        return $this->save_field($field,$args[0]);
    }
  }
  

Die Methoden "load_field" und "save_field" bekommen nun als ersten Parameter den Feldnamen übergeben. Ich muss nur dafür sorgen, dass das callback der Felder der Form load_feldname bzw. save_feldname folgt.

Wenn ich z.B. allen Feldern der Tabelle tl_page ein callback mitgeben will, kann ich es so machen:

  
foreach ($GLOBALS['TL_DCA']['tl_page']['fields'] as $strFieldName => $arrField)
{
  $GLOBALS['TL_DCA']['tl_page']['fields'][$strFieldName]['load_callback'][] = array('DMAPublishCallback','load_'.$strFieldName);
  $GLOBALS['TL_DCA']['tl_page']['fields'][$strFieldName]['save_callback'][] = array('DMAPublishCallback','load_'.$strFieldName);
}
  
Ansichten
Meine Werkzeuge

Contao Community Documentation

Programmierer brauchen viel Bit, auch wenn es Beck's ist.

Christian Schiffler
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge