Les XCLASS dans Typo3
Un article de Typo3 CMS / Documentation Typo3 / Support Typo3.
Sommaire |
[modifier] INTRODUCTION.
les XCLASS permettent de modifier le code d'une fonction d'une extension sans modifier son code original. Toutes les extensions créées a partir du quickstarter incluent les lignes ci -dessous à la fin du code.
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tt_products/lib/class.tx_ttproducts_pi1.php']){
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tt_products/lib/class.tx_ttproducts_pi1.php']);
}
Exemple pour l'extension tt_products.
[modifier] CREATION.
[modifier] Une extension vide.
Pour commencer nous créons une extension vide ce qui va nous permettre de mieux controler le processus de création de notre XCLASS. 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 : xclass_tt_product), ensuite vous mettez à jour et vous enregistrez le résultat.
[modifier] Configuration.
Une fois l'extension créée, ouvrir votre éditeur PHP préféré et créez le fichier 'ext_localconf.php' dans le répertoire où se trouve votre extension (exemple : typo3conf/ext/xclass_tt_product/), dans ce fichier nous ajoutons une ligne avec la référence au tableau $TYPO3_CONF_VARS concernant l'extension, et nous indiquons le chemin où se trouve notre XCLASS (voir INTRODUCTION).
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tt_products/lib/class.tx_ttproducts_pi1.php'] =
PATH_typo3conf.'ext/xclass_tt_product/class.ux_tx_ttproducts_pi1.php';
Notez :
- PATH_typo3conf, permet de retrouver le répertoire 'typo3conf'.
- Le nom d'une XCLASS doit comporter ux et reprendre le nom de la class originale.
ATTENTION : si vous faites une erreurs dans ce fichier vous risquez de planter typo3,
dans ce cas, corriger et supprimer les fichiers temporaires, commencant par 'temp_CACHED...',
dans le dossier typo3conf et actualisez le BE de typo3.
[modifier] La XCLASS.
Toujour dans le dossier de notre extension, nous créons le fichier correspondant à notre XCLASS (exemple : class.ux_tx_ttproducts_pi1.php). dans ce fichier nous créons notre objet.
class ux_tx_ttproducts extends tx_ttproducts {
Il faut indiquer le nom de notre XCLASS et l'extension que l'on étend.
Nous allons prendre comme exemple la fonction 'products_display' de tt_product, deux possibilités s'offrent, soit nous devons modifier une partie du code original, soit ajouter du code à cette fonction.
function products_display($theCode, $errorMessage, $error_code) {
...
}
[modifier] Modification du code.
Dans le cas d'une modification, il suffit de reprendre la totalité du code sans oublier la déclaration de la fonction et ensuite de modifier ce que l'on souhaite du code. Bien sur on conserve les variables envoyées à la fonction.
[modifier] Ajout de code.
Dans le cas de l'ajout de code, il faut prendre la déclaration de la fonction, ensuite il faut faire executé le code original pour cela la commande 'parent::start(variable);', avec 'variable' les données originales de la fonction (exemple : parent::start($theCode, $errorMessage, $error_code);), cette commande permet d'executer ce code, une fois ceci fait vous pouvez ajouter le code que vous souhaitez.
[modifier] CONCLUSION.
Une fois vos modifications effectuées, vider les fichier temporaire de typo et vider le cache FE, votre XCLASS fonctionne.
Les XCLASS sont très pratique, elle nous permettent aussi de modifier aussi les sources de typo3 sans modifier ces même sources, de plus en cas de mise à jour de votre typo et des extensions vos XCLASS vous permettrons de garder les modifications que vous avez effectuées.
[modifier] VOIR AUSSI.
a noter l'existence de l'extension dmc_extender qui permet d'automatiser cette tache ce qui peut simplifier le travail ( http://typo3.org/documentation/document-library/extension-manuals/dmc_extender/0.1.0/view/ ) a la manière du kick starter DMC extender vient se placer dans l'extension manager.
