Typo3 Snippets  >  Snippets  >  Extension-Programmierung  >  DB-Feld beim Speichern mit PHP-Funktion füllen

DB-Feld beim Speichern mit PHP-Funktion füllen

 

In einer eigenen Extension kommt es durchaus vor, dass man eigene DB-Felder aus anderen DB-Feldern füllen möchte ohne dass BE-User darauf Zugriff haben. Z.B. kann man ein Namens-Feld aus den beiden Feldern Vorname und Nachname füllen lassen. Dies geht in TYPO3 mit Hilfe von Hooks:

Erst muss natürlich das DB-Feld angelegt werden (z.B. ext_tables.sql oder direkt).

Anschließend muss der Hook registriert werden (in ext_localconf.php):

require_once(t3lib_extMgm::extPath('myext').'class.tx_myext.php');
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'tx_myext';

Dann noch die Funktion erstellen, die vom Hook aufgerufen wird (class.myext.php):

class tx_myext {
    public function processDatamap_postProcessFieldArray ($status, $table, $id, &$fieldArray, &$reference) {
        if ($table == 'mytable') {
            $row = t3lib_BEfunc::getRecord ($table, $id);
            $GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, "uid=$id", $updArray);
        }
    }
}

Hier wird der Hook postProcessFieldArray (die Funktion wird nach dem eigentlichen Speichern aufgerufen) verwendet - es gibt auch auch noch weitere Hooks (z.B. preProcessFieldArray für einen Aufruf vorm Speichern). Die Reihenfolge der Parameter ist dabei natürlich zu beachten.

Mehr Informationen zur Verwendung von Hooks gibt es hier.