Bienvenue invité ( Connexion | Inscription )
03/11/2006, 11:44
Message
#1
|
|
![]() Star modeste ![]() ![]() ![]() ![]() ![]() ![]() ![]() Groupe : Modérateur Messages : 2 737 Inscrit : 11/04/2006 Lieu : Lyon Membre no 1 562 |
Ceci est un petit résumé parsemé de boutades, d'exemples et d'explications. Le document de référence est le TYPO3 CORE API, section hooks
On en parle souvent, mais, au fond, c'est quoi un HOOK ? Ce qu'on appelle un hook (crochet en bon françois) dans typo3, c'est un moyen particulier de s'accrocher (comment ça je tourne en rond ?) à un endroit précis d'une fonction, d'une section de code. Comment ça marche ? Il n'y a pas vraiment de règle, rien qui n'oblige à le faire de telle ou telle manière. La meilleure manière de savoir comment fonctionne un Hook... c'est d'aller dans le code et de regarder comment c'est fait. Un exemple : Prenons comme exemple un des hooks les plus utilisés : les hooks de la classe TCEMAIN (t3lib/class.t3lib_tcemain.php), dans la fonction process_datamap. Pour information, c'est dans cette fonction que les données provenant des formulaires d'édition backend sont traitées. Au début de la fonction, on remarque ces quelques lignes : CODE // First prepare user defined objects (if any) for hooks which extend this function: $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); } } On comprend donc rapidement que $TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'] est sensé être un tableau contenant une liste de classes à instancier. Les objets ainsi créés seront utilisés plus loin dans des hooks. Regardons un peu plus loin : CODE // Hook: processDatamap_preProcessIncomingFieldArray foreach($hookObjectsArr as $hookObj) { if (method_exists($hookObj, 'processDatamap_preProcessFieldArray')) { $hookObj->processDatamap_preProcessFieldArray($incomingFieldArray, $table, $id, $this); } } Ce bout de code vérifie l'existence d'une méthode bien particulière dans les objets précédemment construits, et si elle existe, alors cette méthode est appellée avec une liste de paramêtres. Libre ensuite au Hook (c'est à dire l'objet, ou plus particulièrement le couple objet+méthode, puisque le même objet peut servir à plusieurs hooks) de récuperer certains de ces paramètres par référence, d'en modifier certains (pour modifier un champ par exemple), ou tout autre action de ce style. Tout ce qu'il faut donc pour utiliser ce hook (il en existe d'autre dans la fonction, et dans d'autres fonctions), c'est une classe php qui comporte une fonction processDatamap_preProcessFieldArray, et déclarer correctement cette classe pour qu'elle soit utilisée. (Exemple, a placer dans un ext_localconf par exemple) CODE $TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][]='EXT:monext/class.tx_monext_tcehook.php:tx_monext_tcehook'; -------------------- -> La rigueur est nécessaire au talent.
-> http://popy.sytes.net -> pp_forum : the UFO extension ;) -> Belink -> <charly> Un geek est, au même titre qu'une imprimante ou un scanner, un périphérique relié à l'ordinateur |
|
|
|
Popy Typo3 Et Les Hooks 03/11/2006, 11:44
zatmania En tant que padawan, je ne peux que remercier mon ... 03/11/2006, 14:09 
Yucky Ah il est vraiment fort ce Popy.
Merci pour cette ... 03/11/2006, 15:16
Macmade Merci d'avoir pris le temps d'écrire ce ré... 04/11/2006, 18:46 
keizo Citation (Macmade @ 4 Nov 2006, 17:48 )2) A q... 15/11/2006, 01:34
Macmade L'ordre des extensions est indiqué dans localc... 15/11/2006, 08:41 
keizo Citation (Macmade @ 15 Nov 2006, 07:43 )L... 15/11/2006, 10:37
Macmade Après! 15/11/2006, 10:43 
rakel l'intérêt c'est surtout de pouvoir facilem... 15/11/2006, 10:54 
Popy Citation (Macmade @ 15 Nov 2006, 11:45 )Après... 15/11/2006, 13:33 
fw-davy dsl pour le détérage, c'est juste pour ajouter... 24/04/2008, 15:17
keizo Merci,
je pense que cela sera utile a pas mal de ... 15/11/2006, 10:49
Chaka2828 Merci, toujours utile! M'enfin, personnell... 24/04/2008, 16:38 ![]() ![]() |
|
Version bas débit | Nous sommes le : 02/09/2010 - 23:39 |
Canal IRC #typo3