Wie nutzt man eigentlich Hooks – gerade diejenigen im Backend? Beispielsweise will man noch eine eigene Funktion absetzen, bevor die Daten aus dem Backend-Formular in Datenbank geschrieben werden.
Eine Anwendung wäre beispielsweise, bestimmte Daten nur dann zu schreiben, wenn man als Administrator im Backend eingeloggt ist (oder eben wenn er dies nicht ist). Würde man versuchen, das Backendfeld selbst in Abhängigkeit des Admin-Statuses darzustellen ist man schnell bei Extensions wie “dynaflex”, die aber unter Umständen einen zu grossen Overhead darstellen. Wir wollen also das Feld (als Flexform) in jedem Fall anzeigen lassen – die eingegebenen Daten aber nur dann in die Datenbank schreiben, wenn der Status Adminstrator gegeben ist.
Dafür gehen wir wie folgt vor:
- Wie legen mit dem Kickstarter eine eigene Extension an – diese muss keinerlei Frontend-Plugin oder Backend-Modul beinhalten (sofern nicht anderweitig benötigt).
- Nehmen wir an, die Extension heisst “meineextension” – dann legen wir Verzeichnis der Extension typo3conf/ext/meineextension einen Ordner mit dem Namen hooks an
- In der Datei ext_localconf.php registrieren wir nun eine sogenannte Hook-Funktion (alles in eine Zeile notieren – statt meineextension muss natürlich der richtige Name verwendet werden):
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php'] ['processDatamapClass'][] = 'EXT:meineextension/hooks/ class.tx_meineextension_tcemain_pdm_pre.php:tx_meineextension_tcemain_pdm_pre';
- Der Hook ist nun registriert – nun muss noch die Datei mit der Klasse angelegt werden, die unsere Hook-Funktion enthält. Dazu legen wir im hooks-Verzeichnis nun eine Datei mit dem Namen class.tx_meineextension_tcemain_pdm_pre.php an.
- Diese Datei enthält nun den folgenden Code:
<?php class tx_simplefilebrowser_tcemain_pdm_pre { function processDatamap_preProcessFieldArray(&$fieldArray, $table, $id, &$pObj) { if (!$GLOBALS['BE_USER']->isAdmin()) { $fieldArray['pi_flexform']['data']['sDEF']['lDEF']['directory']['vDEF'] = ""; } } } ?> - Voilá – wir sind fertig. Aber was haben wir da eigentlich gemacht?
- Nun – prinzipiell gibt es natürlich etliche Hooks im Backend. Wir haben uns denjenigen herausgesucht, der dafür zuständig ist, kurz VOR der Speicherung der Backend-Formulardaten aufgerufen zu werden – namentlich der Hook processDatamap_preProcessFieldArray in der Datei t3lib/class.t3lib_tcemain.php.
- Wenn wir nun das Array $fieldArray direkt manipulieren, wird der neue dort enthaltene Wert direkt statt dem urpsünglich vorhandenen in die Datenbank geschrieben. Wir könnten nun beispielsweise den gerade editieren Datensatz auf hidden stellen, wenn wir $fieldArray['hidden'] = 1 schreiben würden. Wir setzen in unserem Beispiel einen Wert in der vorhandenen Flexform auf den Leerstring (und löschen damit einen eventuell eingegebenen) – dies allerdings nur, wenn der eingeloggte User nicht Admin ist.



