• Save
Hooks
Upcoming SlideShare
Loading in...5
×
 

Hooks

on

  • 1,974 views

Alles rund zum Thema Hooks in TYPO3

Alles rund zum Thema Hooks in TYPO3

Statistics

Views

Total Views
1,974
Views on SlideShare
1,958
Embed Views
16

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 16

http://lanyrd.com 16

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Hooks Hooks Presentation Transcript

  • 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 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Vielen Dank!CPS-ITBüro BerlinNeue Promenade 5Hackescher Markt10178 Berlin030.2759537.1cordes@cps-it.de