Zum Inhalt springen

processDatamapClass - nur einmal verwenden?

Erstellt am 2. Februar 2009 · 7 Antworten · letzte Antwort am 2. Februar 2009

Tags: Frage

charlin ·

Hallo!

Ich habe in zwei Extensions von mir den Hook processDatamapClass eingebaut.

Jetzt wird dieser Hook jedoch immer nur in einer Extension ausgeführt. Bei der zweiten Extension klappt die Datenmanipulation nicht.

Nehme ich bei der ersten Extension diesen Hook raus, so klappt dieser auch in der zweiten Extension.

Kann man diese Klasse immer nur einmal verwenden?

Danke.

ThBodi ·

Vermutlich hast Du bei der Einbindung Deiner Klasse den gleichen Schlüssel verwendet? Prinzipiell kann man beliebig viele eigene Klassen in einen Hook einhängen.

// Extension A:
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['irgendeinSchlüssel'] = ...{KlasseA}

// Extension B:
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['irgendeinSchlüssel'] = ...{KlasseB}

//ergibt:
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['irgendeinSchlüssel'] = ...{KlasseB}
// Extension A:
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = ...{KlasseA}

// Extension B:
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = ...{KlasseB}

//ergibt:
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][{index}] = ...{KlasseA}
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][{index}] = ...{KlasseB}
charlin ·

Hallo!

Vielen Dank für die schnelle Antwort.

Das kapiere ich leider noch nicht, hier mein Beispiel:

Extension1:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['normal'] = 'EXT:' . $_EXTKEY . '/hooks/class.tx_lg24flex_pi1_hooks_tce.php:tx_lg24flex_pi1_hooks_tce';

Extension2:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['links'] = 'EXT:' . $_EXTKEY . '/hooks/class.tx_lg24flexlinks_pi1_hooks_tce.php:tx_lg24flexlinks_pi1_hooks_tce';

Ich komme leider mit deinem 2. PHP-Teil nicht zurecht.

Danke.

ThBodi ·

Ist nicht so wichtig. Scheint nicht Dein Problem zu sein.
In welcher Datei hast Du diese Zeilen stehen?

charlin ·
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['normal'] = 'EXT:' . $_EXTKEY . '/hooks/class.tx_lg24flex_pi1_hooks_tce.php:tx_lg24flex_pi1_hooks_tce';

Das steht in der ext_localconf.php der Extension.

ThBodi ·

Ich hatte auch schon mal komische Effekte mit Hooks in der ext_localconf.php. In der ext_tables.php gab es daher bei mir bisher keine Probleme. Versuch also mal diese Zeile(n) in die ext_tables.php zu verschieben, vielleicht erübrigt sich dadurch das merkwürdige Verhalten.

charlin ·

Habe jetzt den Aufruf der Klasse in ext_tables.php, passiert immer noch das gleiche.

Nochmal alles zusammen gefasst:
Extension1:
Aufruf der Klasse in der Datei ext_tables.php mit:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['links'] = 'EXT:' . $_EXTKEY . '/hooks/class.tx_lg24flexlinks_pi1_hooks_tce.php:tx_lg24flexlinks_pi1_hooks_tce';

Ausschnitt des Hooks für die Extension1:

class tx_lg24flexlinks_pi1_hooks_tce{
	
	function processDatamap_afterDatabaseOperations($status, $table, $id, &$fieldArray, &$tcemain) {

Extension2:
Aufruf in ext_tables.php:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['normal'] = 'EXT:' . $_EXTKEY . '/hooks/class.tx_lg24flex_pi1_hooks_tce.php:tx_lg24flex_pi1_hooks_tce';

Ausschnitt der Klasse:

class tx_lg24flex_pi1_hooks_tce {
	
	function processDatamap_postProcessFieldArray($status, $table, $id, &$fieldArray, &$tcemain) {

Wenn ich nun aus Extension1, den Aufruf des Hooks rausnehme, dann wird bei Extension2 alles korrekt ausgeführt.
Ist alles so wie oben beschrieben, dann wird immer die Klasse der Exension1 ausgeführt.

Finde den Fehler nicht....

ThBodi ·

Nur mal zur Sicherheit: Daten, die Du innerhalb der Funktion "processDatamap_afterDatabaseOperations" manipulierst, musst Du auch innerhalb dieser Funktion "händisch" in die Datenbank schreiben, in der TCEMain passiert das nicht mehr. Außerdem wird dieser Hook immer nach "processDatamap_postProcessFieldArray" aufgerufen.

Du kannst im TYPO3-Backend unter "Admin-Werkzeuge"->"Konfiguration" überprüfen, ob die Hooks richtig registriert sind, ansonsten muss der Fehler in Deiner Programmlogik liegen.