Rappelons d’abord qu’en programmation, la surcharge consiste à modifier le comportement standard (la fonction d’origine) par une autre version, donnant un fonctionnement adapté (souvent dans un cas particulier : surcharge de spécialisation).
La syntaxe de principe
Dans une implémentation SPIP, la surcharge de fonction consiste donc de redéfinir une fonction existant génériquement dans le core de SPIP, et prévue pour ! avec une nouvelle définition de fonction php, ayant exactement les mêmes paramètres, dans le même ordre ; seule différence, le nom de la fonction à surcharger était définie dans le spip avec un suffixe _dist
, alors que la nouvelle version (que vous écrirez probablement dans un fichier mes_fonctions) portera le même nom sans suffixe (ceci pour éviter un conflit de noms dans l’espace de nommage php).
Comment SPIP gère-t-il l’appel ?
En programmation php, une fonction est "appelée", c’est-à-dire que son code est exécuté classiquement lorsque le programme rencontre le nom de fonction dans une instruction...
Et vous me ferez remarquer que les deux fonctions en cause, la fonction générique et la fonction de surcharge n’ont pas exactement le même non : oui, et heureusement (sinon conflit !).
Mais les développeurs de SPIP ont préparé un mécanisme général, tirant parti du fonctionnement interne de l’appel par un "pointeur" sur l’adresse réelle du code de la fonction : c’est le rôle de la fonction SPIP nommée justement charger_fonction(), d’opérer cette ’magie’ [1] !
Où placer le code d’une fonction de surcharge
En règle générale, les fonctions de traitement php sont utilisées pour l’interprétation des squelettes, donc lors de la phase de pré-compilation...
SPIP prévoit un fichier source mes_fonctions.php
que le Webmestre pourra créer et remplir, pour contenir toutes le fonctions codées pour compléter le traitement des squelettes : c’est en général l’endroit privilégier pour ajouter de telles fonctions.
Ce fichier sera chargé uniformément pour toutes les opérations d’interpretations de squelettes ; mais vous pouvez jouer plus finement, si votre fonction ne doit servir qu’a un seul squelette (disons ma_page_a_moi.html
), en créant un fichier source .php associé de meme nom et suffixé par _fonctions (ici ce serait ma_page_a_moi_fonctions.php
).
Cela vous permettrait même d’avoir plusieurs définitions alternatives, dans plusieurs fichiers utilisés dans plusieurs squelettes...mais cela devient un peu extrême....
Article publié le 1er avril 2014, et actualisé en février 2015 .
Répondre à cet article