IPB

Bienvenue invité ( Connexion | Inscription )

 Forum Rules NOTA BENE : Les nouveaux sujets sont soumis à la validation !
> Typo3 Et Les Hooks, mathaaus m'a forcé
Popy
posté 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
Go to the top of the page
 
+Quote Post

Les messages de ce sujet


Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 02/09/2010 - 23:39

> Canal IRC #typo3

utilisateur sont en train de parler sur le canal

IRC Users
Mode du canal



NB : Les utilisateurs connectés en mode invisible (+i) ne sont pas présents sur cette liste
@Opérateurs (op), %modérateurs (half-op), +membres réguliers (voice), visiteurs.

Design by: Invision Skins, HYIP Forum & Gad Lab