Feldname an Callback übergeben: Unterschied zwischen den Versionen

Aus Contao Community Documentation

 
(3 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
 
[[category:Dev_Snippets]]
 
[[category:Dev_Snippets]]
Wenn man viele Felder in einem Backend-Formular per load_callback oder save_callback manipulieren will, müsste man eigentlich für jedes Feld eine eigene Callback-Funktion schreiben. Wenn man aber in jedem Fall prinzipiell die selbe Manipulation vornimmt (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.
+
Wenn man viele Felder in einem Backend-Formular per load_callback oder save_callback manipulieren will, müsste man eigentlich für jedes Feld eine eigene Callback-Funktion schreiben. Wenn man aber in jedem Fall prinzipiell die selbe Manipulation vornimmt (z.B. die Daten statt aus der Datenbank woanders einzulesen), ist es sinnvoller, immer die selbe Funktion zu nutzen. Leider übergibt Contao diesem callback, aber nicht den Feldnamen.
  
 
Dank der PHP Methode "__call" kann man aber der Klasse diese Möglichkeit nachrüsten:
 
Dank der PHP Methode "__call" kann man aber der Klasse diese Möglichkeit nachrüsten:
  
<pre>
+
<source lang="php">
  <nowiki>
+
 
   /**
 
   /**
 
   * Automatic callback functions for every field
 
   * Automatic callback functions for every field
Zeile 20: Zeile 19:
 
     }
 
     }
 
   }
 
   }
  </nowiki>
+
</source>
</pre>
+
  
 
Die Methoden "load_field" und "save_field" bekommen nun als ersten Parameter den Feldnamen übergeben. Man muss nur dafür sorgen, dass das callback der Felder der Form load_''feldname'' bzw. save_''feldname'' folgt.
 
Die Methoden "load_field" und "save_field" bekommen nun als ersten Parameter den Feldnamen übergeben. Man muss nur dafür sorgen, dass das callback der Felder der Form load_''feldname'' bzw. save_''feldname'' folgt.
Zeile 27: Zeile 25:
 
Wenn man z.B. allen Feldern der Tabelle tl_page ein callback mitgeben will, kann man es so machen:
 
Wenn man z.B. allen Feldern der Tabelle tl_page ein callback mitgeben will, kann man es so machen:
  
<pre>
+
<source lang="php">
  <nowiki>
+
 
foreach ($GLOBALS['TL_DCA']['tl_page']['fields'] as $strFieldName => $arrField)
 
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]['load_callback'][] = array('DMAPublishCallback','load_'.$strFieldName);
   $GLOBALS['TL_DCA']['tl_page']['fields'][$strFieldName]['save_callback'][] = array('DMAPublishCallback','load_'.$strFieldName);
+
   $GLOBALS['TL_DCA']['tl_page']['fields'][$strFieldName]['save_callback'][] = array('DMAPublishCallback','save_'.$strFieldName);
 
}
 
}
  </nowiki>
+
</source>
</pre>
+

Aktuelle Version vom 27. Februar 2012, 16:54 Uhr

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

Dank der PHP Methode "__call" kann man 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. Man muss nur dafür sorgen, dass das callback der Felder der Form load_feldname bzw. save_feldname folgt.

Wenn man z.B. allen Feldern der Tabelle tl_page ein callback mitgeben will, kann man 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','save_'.$strFieldName);
}
Ansichten
Meine Werkzeuge

Contao Community Documentation

Das ist der Originaltext der Contao Association zur Mitgliederverwendung ... äh ... Mittelverwendung.

Tristan Lins
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge