Hooks nutzen? [Gelöst]

  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    06. 02. 2007, 17:18

    Hallo!

    Irgendwie ist heut nicht mein Tag... versuche gerade die Hooks von TemplaVoila zu nutzen:
    in der localconf.php

    1. require_once(t3lib_extMgm::extPath($_EXTKEY).'class.tx_peppy_rendering.php');
    2.  
    3. $TYPO3_CONF_VARS['EXTCONF']['templavoila']['pi1']['renderElementClass']['renderElement_preProcessRow'] = 'tx_peppy_rendering->renderElement_preProcessRow';
    4.  
    5. //[...]
    6. // schnipp

    class.tx_peppy_rendering.php:

    1. <?
    2. class tx_peppy_rendering
    3. {
    4. function renderElement_preProcessRow($row, $table, $this)
    5. {
    6. var_dump($row);
    7. var_dump($table);
    8. var_dump($this);
    9. }
    10. }
    11. ?>

    Leider passiert gar nix, nachdem ich dann in der class.tx_templavoila_pi1.php ein paar ausgaben gemacht hab, sah ich leider nur dass $classRef zwar meine Angabe hat, aber das "&t3lib_div::getUserObj($classRef);" liefert nix zurück. Kann mir jemand mal auf die Sprünge helfen?

    1. if (is_array ($TYPO3_CONF_VARS['EXTCONF']['templavoila']['pi1']['renderElementClass'])) {
    2. foreach ($TYPO3_CONF_VARS['EXTCONF']['templavoila']['pi1']['renderElementClass'] as $classRef) {
    3. $hookObjectsArr[] = &t3lib_div::getUserObj($classRef);
    4. }
    5. }


  • 1
  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    06. 02. 2007, 17:34

    ok, hat sich erledigt:

    der Fehler lag in der localconf.php:

    1. require_once(t3lib_extMgm::extPath($_EXTKEY).'class.tx_peppy_rendering.php');
    2.  
    3. $TYPO3_CONF_VARS['EXTCONF']['templavoila']['pi1']['renderElementClass'][] = 'tx_peppy_rendering';

  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    06. 02. 2007, 17:57

    das sind die besten Beiträge :)

    Oft wenn die Verzweiflung gross ist, beantworten sich die Fragen unmittelbar nach dem absenden ;)

  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    06. 02. 2007, 18:01

    ja #angry#

    sorry guys, vielleicht hilft es ja jemandem #giggle#

  • helge helge
    Padawan
    0 x
    53 Beiträge
    0 Hilfreiche Beiträge
    07. 02. 2007, 13:25

    Ich häng mich mal einfach an diesen Thread dran, mein Problem ist zu nahe dran um einen neuen Thread aufzumachen :)

    Newbie-Warnung: Dies ist das erste Mal, dass ich versuche, einen Hook zu nutzen.

    Ich brauche einen Hook, der beim speichern der Werte meiner Extension im Backend greift. Wenn ich Robert Lemke's [url=http://typo3.org/development/articles/how-to-use-existing-hooks/page/1/]Tutorial[/url] richtig verstehe, muss ich dazu einen Hook in t3lib_tcemain::process_datamap() nutzen.

    Dem Tutorial folgend, habe ich folgende Klasse geschrieben:

    1. class tx_myextension_tcemainprocdm {
    2.  
    3. function processDatamap_postProcessFieldArray ($status, $table, $id, &$fieldArray, &$this) {
    4. t3lib_div::debug('Hallo?');
    5. }
    6.  
    7. }
    und sie in der ext_localconf.php registriert mit
    1. $GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:hp_taz_article/class.tx_myextension_tcemainprocdm.php:tx_myextension_tcemainprocdm';
    Es gibt keine Ausgabe, anscheinend wird beim Speichern eines Plugins nicht mal process_datamap() aufgerufen (laut Debug-Ausgabe in dieser Funktion).

    Was mache ich falsch? Wo muss ich einen Hook setzen, der beim Speichern aufgerufen wird? Gibt es irgendwo eine Dokumentation zu den existierenden Hooks und wie man sie nutzt (die Core API Doc sagt nein, aber vielleicht weiß ja jemand was)?

    Thanks, Helge

  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    07. 02. 2007, 14:35

    Hast du denn in der localconf die Datei eingebunden?: und entsprächend verlinkt?

    1. require_once(t3lib_extMgm::extPath($_EXTKEY).'class.deineklasse.php');
    2.  
    3. $GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'deineklasse';

    in der Klasse deineklasse, muss sich die funktion befinden die du mit dem hook ausführen willst.

  • helge helge
    Padawan
    0 x
    53 Beiträge
    0 Hilfreiche Beiträge
    07. 02. 2007, 15:47

    Die 'EXT:.../class.blah.php:blah'-Syntax hab ich aus dem Tutorial. Soll kurz fuer

    1. require_once(require_once(t3lib_extMgm::extPath($_EXTKEY).'blah.php');
    2. $GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'blah';
    stehen.

    Ich hab's jetzt mit require_once() probiert, aber es hat genausowenig geklappt.

  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    07. 02. 2007, 15:54

    Hi,

    geh doch mal in die: t3lib/class.t3lib_tcemain.php datei, und schau dir die entsprächende Stelle an. Mache dort ein paar Ausgaben:

    steht dann deine Klasse drin?

    1. $GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']

    was spuckt denn das Array an der Stelle aus?

    1. $hookObjectsArr[] = &t3lib_div::getUserObj($classRef);

    Wie heisst du Funktion die du wirklich überschreiben willst?
    Befindet diese sich in deiner Klasse?

  • helge helge
    Padawan
    0 x
    53 Beiträge
    0 Hilfreiche Beiträge
    07. 02. 2007, 18:35

    [quote="anj"]geh doch mal in die: t3lib/class.t3lib_tcemain.php datei, und schau dir die entsprächende Stelle an. [/quote]Die Debugausgaben, die Du mir vorschlägst, habe ich in t3lib_tcemain::process_datamap() untergebracht. Leider wird überhaupt nichts ausgegeben, was mir darüber, dass das wohl die falsche Funktion ist, hinaus nichts sagt.

    Wie heisst du Funktion die du wirklich überschreiben willst?

    [i]Das[/i] ist anscheinend die 1000-Dollar-Frage. Ich brauche einen Hook, der sich beim, genauer gesagt vor dem Speichern eines Datensatzes einhängt. Welche Funktion da zuständig ist, kann ich aus der Doc für t3lib_tcemain nicht ersehen.

    BTW (das werde ich später noch brauchen): Wenn ich einen Datensatz löschen will, schreibe ich einen Hook, der in deleteRecord() aufgerufen ist, richtig? Nur dass ich in dieser Funktion keine Hookverarbeitung feststellen kann...

    Befindet diese sich in deiner Klasse?

    Ich verstehe diese Frage nicht so recht... In meiner User-Klasse habe ich nur die Funktion, die von dem Hook aufgerufen werden soll. In meiner Extension-Klasse habe ich keine Funktion zum Speichern des Datensatzes, das muss ja der Core erledigen... oder? :o

  • helge helge
    Padawan
    0 x
    53 Beiträge
    0 Hilfreiche Beiträge
    08. 02. 2007, 10:21

    Problem gelöst... man sollte öfter mal den Backend-Cache leeren :o

    Sorry für die Welle und danke für die Bemühungen!

  • 1