ProjektTYPO3ThemaRund um HooksStand09.08.2011VonNicole Cordes
Rund um Hooks» Begriffsdefinition» Hooks erkennen» Hooks nutzen» XClasses
www.cps-it.de      BEGRIFFSDEFINITION      • Hook sind dazu da, dass TYPO3-System zu erweitern und flexibel auf Ein- und A...
www.cps-it.de      HOOKS ERKENNEN      • In den meisten Extensions sind Hooks im Manual definiert      • Für das Frontend ...
www.cps-it.de      HOOKS ERKENNEN      1. „method_exists“-Variante      if (is_array      ($GLOBALS[TYPO3_CONF_VARS][SC_OP...
www.cps-it.de      HOOKS ERKENNEN      2. „Hook-Object“-Variante      $hookObjectsArr = array();      if (is_array      ($...
www.cps-it.de      HOOKS ERKENNEN      3. „callUserFunction“-Variante      if (is_array($this-      >TYPO3_CONF_VARS[SC_OP...
www.cps-it.de      HOOKS NUTZEN      • Grundlegend wird die „Aktivierung“ in der ext_localconf.php vorgenommen      • Imme...
www.cps-it.de      HOOKS NUTZEN      Aufgerufene Hook-Funktion:      foreach($hookObjectsArr as $hookObj) {        if (met...
www.cps-it.de      HOOKS NUTZEN      Aufgerufene Hook-Funktion:      if (is_array($this->TYPO3_CONF_VARS[SC_OPTIONS][tslib...
www.cps-it.de      XCLASSES      • Am Ende (fast) jeder Klassen-Datei      • Hiermit werden Klassen überschrieben (überlag...
Vielen Dank!CPS-ITBüro BerlinNeue Promenade 5Hackescher Markt10178 Berlin030.2759537.1cordes@cps-it.de
Upcoming SlideShare
Loading in …5
×

Hooks

2,077 views
1,937 views

Published on

Alles rund zum Thema Hooks in TYPO3

Published in: Self Improvement, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,077
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

×