Fonctionnement du path Comment chercher des fichiers ou des fonctions

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.

, par PiiF