Les hooks dans typo3
De Typo3 CMS / Documentation Typo3 / Support Typo3.
Sommaire |
INTRODUCTION.
Les hooks, 'crochets' en français, permettent de rajouter du codes à l'intérieur d'une fonction d'une extension sans altérer la classe mère ou l'étendre.
CREER UN HOOK DANS UNE EXTENSION.
Si vous le souhaitez vous pouvez autoriser dans une de vos extensions l'utilisation d'un hook, les lignes ci-dessous montre un exemple d'intégration du code.
Pour cet exemple, on utilise une extension qui s'appelle 'testextension', dans une fonction EditProduct qui édite en FE une liste de produit et on souhaite autoriser l'ajout de code après l'édition pour ajouter l'affichage de champ créer par d'autre développeur.
$hookObjectsArr = array();
if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['class.tx_testextension_pi1.php']['afterEditProduct'])) {
foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['class.tx_testextension_pi1.php']['afterEditProduct'] as $classRef) {
$hookObjectsArr[] = &t3lib_div::getUserObj($classRef);
}
}
Dans ce code nous voyons le nom de l'extension et un terme permettant de décrire où le hook vas intervenir. Ensuite nous parcourons ce tableau qu'on insère dans un tableau.
foreach($hookObjectsArr as $hookObj) {
if (method_exists($hookObj, 'afterEditProduct_addotherfield')) {
$content = $hookObj->afterEditProduct_addotherfield($FieldArray, $table, $this, $content);
}
}
Ensuite ce code permet de spécifier le ou les fonctions que le développeur peux créer dans son hook ainsi que les paramètres que vous l'authoriser à utiliser. Dans notre exemple nous authorisons le développeur a créer une fonction qui s'appelera 'afterEditProduct_addotherfield' à la quel nous envoyons quelques paramètres qui pouraient être utile au développeur.
Dans notre exemple le hook doit intervenir sur le contenu donc nous récupérons le résultat du hook, mais vous pouvez très bien autoriser un hook qui ne renvoie pas de résultat.
UTILISER UN HOOK.
Avant de créer un hook la première chose à vérifier est de savoir si l'extension accepte un hook, le meilleur moyen est de vérifier les sources et de récupérer quelques paramètres. Si l'extension ne contient pas la possibilité de hook ou que les hooks ne vous intéresse pas vous pouvez passer par une XCLASS.
Installation.
Une fois le hook repéré, vous récupérez les éléments du tableau 'TYPO3_CONF_VARS' et les fonctions que vous pouvez créer. Dans un soucis de maitrise de création de notre hook, nous passerons par la création d'un extension vide. Aller dans l'extension manager, menu -> 'make a new extension' (selon la langue de l'interface typo3), vous lui donnez un nom de préférence explicite (exemple : hook_testextension), ensuite vous mettez à jour et vous enregistrez le résultat.
Configuration.
Ensuite, nous créons un fichier 'ext_localconf.php' dans le répertoire où se trouve notre extension vide. dans ce fichier nous insérons les valeurs que l'on a récupéré du tableau 'TYPO3_CONF_VARS', ajouter ensuite la fonction que l'on vas utiliser, l'exemple ci-dessous est basé sur 'testextension'.
$TYPO3_CONF_VARS['SC_OPTIONS']['class.tx_testextension_pi1.php']['afterEditProduct']['afterEditProduct_addotherfield'] =
'EXT:hook_testextension/class.hooktestextension.php:user_hooktestextension';
Nous retrouvons les différents éléments de notre tableau 'TYPO3_CONF_VARS' ainsi que la fonction, dans ce tableau nous indiquons ou se trouve le fichier php contenant le code de notre hook et quel 'class' sera utilisé.'EXT:' permet de retrouver le dossier des extensions.
Le fichier hook.
Nous créons le fichier que l'on utilise dans notre fichier 'ext_localconf.php', dans notre exemple 'class.hooktestextension.php'. Ensuite, on crée la class avec le même nom que notre fichier avec 'user_' devant. Enfin nous créons la fontion en elle-même avec les paramettre que le créateur du hook nous envoie.
class user_hooktestextension {
function afterEditProduct_addotherfield($FieldArray, $table, $this, $content) {
...
}
}
Ensuite vous pouvez créer votre prope code.
CONCLUSION.
Les hooks sont très pratique, pour les développeur d'extension car ils permettent d'ajouter des traitements ou des affichages auqels il n'aurait pas pensé et permettent d'étendre ces extensions sans ajouter de code à l'extension d'origine.
Les hooks sont plus prope que les XCLASS car avec un hook vous protégez le code source, et pour de petites interventions dans des sources, les hooks sont plus rapidement exploitable (peu d'analyse de code original).
