Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Nächste SlideShare
WPDB -  das unbekannte Objekt
WPDB - das unbekannte Objekt
Wird geladen in …3
×

Hier ansehen

1 von 12 Anzeige

Weitere Verwandte Inhalte

Anzeige

Ähnlich wie Hooks (20)

Anzeige

Hooks

  1. 1. Projekt TYPO3 Thema Rund um Hooks Stand 09.08.2011 Von Nicole 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, News CPS-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“-Variante CPS-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 muss CPS-IT mehr wert im netz TYPO3 // Rund um Hooks Seite 11
  12. 12. Vielen Dank! CPS-IT Büro Berlin Neue Promenade 5 Hackescher Markt 10178 Berlin 030.2759537.1 cordes@cps-it.de

×