Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Hooks

2.537 Aufrufe

Veröffentlicht am

Alles rund zum Thema Hooks in TYPO3

  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Hooks

  1. 1. ProjektTYPO3ThemaRund um HooksStand09.08.2011VonNicole Cordes
  2. 2. Rund um Hooks» Begriffsdefinition» Hooks erkennen» Hooks nutzen» XClasses
  3. 3. www.cps-it.de BEGRIFFSDEFINITION • Hook sind dazu da, dass TYPO3-System zu erweitern und flexibel auf Ein- und Ausgabe reagieren zu können • Es können Funktionen und / oder Variablen abgeändert werden • Hooks für Inhaltsveränderungen, Verhalten im Backend und Frontend • Bekannte Beispiele: RealURL / CoolURI, DAM, NewsCPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 3
  4. 4. www.cps-it.de HOOKS ERKENNEN • In den meisten Extensions sind Hooks im Manual definiert • Für das Frontend online (http://buzz.typo3.org/people/stucki/article/typo3-frontend-rendering- explained/) • Für das Backend im TYPO3 Core nur über eine Suche im PHP-Code zu finden, aber dort sehr gut kommentiert • Extension „Useful informations in reports module” (additional_reports) listet vorhandene Hooks im TYPO3-Backend auf • Drei Arten von Hooks-Definitionen: „method_exists“-Variante, „Hook-Object“-Variante (empfohlen, wenn in einer Funktion mehrere Hooks integriert werden sollen), „callUserFunction“-VarianteCPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 4
  5. 5. www.cps-it.de HOOKS ERKENNEN 1. „method_exists“-Variante if (is_array ($GLOBALS[TYPO3_CONF_VARS][SC_OPTIONS][t3lib/class.t3lib_userauthgroup.php][fetchGro upQuery])) { foreach ($GLOBALS[TYPO3_CONF_VARS][SC_OPTIONS][t3lib/class.t3lib_userauthgroup.php][fetchGro upQuery] as $classRef) { $hookObj = t3lib_div::getUserObj($classRef); if(method_exists($hookObj,fetchGroupQuery_processQuery)){ $whereSQL = $hookObj->fetchGroupQuery_processQuery($this, $grList, $idList, $whereSQL); } } }CPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 5
  6. 6. www.cps-it.de HOOKS ERKENNEN 2. „Hook-Object“-Variante $hookObjectsArr = array(); if (is_array ($TYPO3_CONF_VARS[SC_OPTIONS][t3lib/class.t3lib_tcemain.php][processDatamapClass])) { foreach ($TYPO3_CONF_VARS[SC_OPTIONS][t3lib/class.t3lib_tcemain.php][processDatamapClass] as $classRef) { $hookObjectsArr[] = t3lib_div::getUserObj($classRef); } } foreach($hookObjectsArr as $hookObj) { if (method_exists($hookObj, processDatamap_preProcessFieldArray)) { $hookObj->processDatamap_preProcessFieldArray($incomingFieldArray, $table, $id, $this); } }CPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 6
  7. 7. www.cps-it.de HOOKS ERKENNEN 3. „callUserFunction“-Variante if (is_array($this- >TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][checkAlternativeIdMethods- PostProc])) { $_params = array(pObj => &$this); foreach($this- >TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][checkAlternativeIdMethods- PostProc] as $_funcRef) { t3lib_div::callUserFunction($_funcRef,$_params,$this); } }CPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 7
  8. 8. www.cps-it.de HOOKS NUTZEN • Grundlegend wird die „Aktivierung“ in der ext_localconf.php vorgenommen • Immer abhängig vom verwendeten Hook • Für Core-Hooks wird $GLOBALS [TYPO3_CONF_VARS][SC_OPTIONS] [[dir]/class.[classname].php][hookname] verwendet • Bei Extensions über $GLOBALS[TYPO3_CONF_VARS][EXTCONF][extkey][hookname] • Immer ein Array, dass im besten Fall assoziativ (mit Extension-Key) verwendet wird Varianten 1 und 2 erwartet eine Datei- / Klassenkombination (Funktion durch Hook vorgegeben) $GLOBALS [TYPO3_CONF_VARS][SC_OPTIONS][t3lib/class.t3lib_tcemain.php] [processDatamapClass] [tt_news] = EXT:tt_news/lib/class.tx_ttnews_tcemain.php:tx_ttnews_tcemain; Variante 3 erwartet eine Datei- / Klassen- / Funktionskombination $TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][checkAlternativeIdMethods- PostProc] [tx_realurl] = EXT:realurl/class.tx_realurl.php:&tx_realurl->decodeSpURL;CPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 8
  9. 9. www.cps-it.de HOOKS NUTZEN Aufgerufene Hook-Funktion: foreach($hookObjectsArr as $hookObj) { if (method_exists($hookObj, processDatamap_preProcessFieldArray)) { $hookObj->processDatamap_preProcessFieldArray($incomingFieldArray, $table, $id, $this); } } Klassendefinition (nach „method_exists“ und „hook-objects“ Varianten) <?php class tx_ttnews_tcemain { function processDatamap_preProcessFieldArray(&$fieldArray, $table, $id, &$pObj) { […] } } ?>CPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 9
  10. 10. www.cps-it.de HOOKS NUTZEN Aufgerufene Hook-Funktion: if (is_array($this->TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][checkAlternativeIdMethods- PostProc])) { $_params = array(pObj => &$this); foreach($this->TYPO3_CONF_VARS[SC_OPTIONS][tslib/class.tslib_fe.php][checkAlternativeIdMethods-PostProc] as $_funcRef) { t3lib_div::callUserFunction($_funcRef,$_params,$this); } } Klassendefinition (nach „callUserFunction“-Variante) <?php class tx_realurl_tcemain { public function decodeSpURL($params) { […] } } ?>CPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 10
  11. 11. www.cps-it.de XCLASSES • Am Ende (fast) jeder Klassen-Datei • Hiermit werden Klassen überschrieben (überlagert) • Funktionen können somit hinzugefügt / erweitert werden Nachteile: • Es kann jeweils nur eine Erweiterung pro Klasse eingesetzt werden • Zwingender Einsatz von t3lib_div::makeInstance bei Aufruf der Klasse • Sehr wartungsanfällig, da XCLASS meist an die jeweilige TYPO3-Version angepasst werden mussCPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 11
  12. 12. Vielen Dank!CPS-ITBüro BerlinNeue Promenade 5Hackescher Markt10178 Berlin030.2759537.1cordes@cps-it.de

×