L’idée c’est de rendre un max de choses surchargeables, et cela passe par la fonction find_in_path
qui cherche les éléments dans une liste de répertoires/fichiers par "priorités" décroissantes
- pour chercher un exec, un squelettes, un formulaire ... on passe par cette fonction qui cherche tour à tour dans la liste des répertoires et s’arrête dès qu’elle en trouve un :
-
$dossier_squelettes
: peut définir un ou plusieurs chemins (séparés par ’ :’), et définissable dans mes_options - squelettes/
- plugins (=> voir détail plus tard)
- formulaires/
- dist/
- DIR_INCLUSION = /ecrire/ par défaut, surchargeable également
-
exemple : find_in_path(’exec/truc.php’) => squelettes/exec/truc.php sinon, ecrire/exec/truc.php ...
include_spip : exemple include_spip(’inc/charset’)
- effectue un include de
inc/charset.EXTENSION
include_fonction : idée = je veux executer la fonction xyz où qu’elle soit
exemple $f= include_fonction(’truc’, ’exec’)
- cherche exec_truc sinon exec_truc_dist
- sinon appelle include_spip(’exec/truc’) puis refait la recherche, sinon die
- retourne le nom trouvé => retourne le nom de la fonction à appeler
- y’a plus qu’à faire
$f()
dans l’espace privé
- ecrire/index récupère le exec=truc
- appel de auth qui valide les droits => include_fonction(’auth’, ’inc’)
- recherche d’une fonction exec_truc, sinon, exec_truc_dist dans un exec/truc.php
=> find_in_path
idée : exec_truc peut surcharger exec_truc_dist mais appeler l’original s’il le souhaite.
Donc, pour surcharger exec_truc_dist de exec/truc.php :
- définir une fonction exec_truc dans squelettes/exec/truc.php, c’est tout !
- si on veut appeler la fonction originale dedans :
- include(DIR_INCLUDE/exec/truc.php)
- appeler exec_truc_dist() explicitement
sinon, on tourne en rond ...
De même, pour surcharger l’authent, il suffit d’un fichier squelettes/inc/auth.php qui défini une fonction inc_auth, on peut alors faire des accès admin restreints étendus
ATTENTION (à vérifier par un pro de SPIP) : certains plugin créés avec la version 1.9.2 de SPIP utilisent le paramètre "action" dans l’url style : / ?exec=truc&action=machin. Depuis la version 2.0 de SPIP, "action" est un mot réservé. Il faut remplacer "action" par "param" (par exemple) dans le plugin pour qu’il fonctionne avec la version 2.0 de SPIP.