SPIP - Contrib

SPIP - Contrib

[ar] [en] [es] [fr] [it]

44 visiteurs en ce moment

fontsizeup fontsizedown
Accueil du site > Contribs > Documentation > Tutoriaux pour le code de SPIP > SPIP 1.9 - Que fait SPIP pour servir une page de la partie privée (...)
[4 commentaires]

SPIP 1.9 - Que fait SPIP pour servir une page de la partie privée ?

samedi 4 mars 2006, par Cedric Morin

0 vote

Que fait SPIP quand on demande une page dans la partie privée par une requête de type ecrire/?exec=truc ?

En deux mots

En substance, pour répondre a cette requête, SPIP appelle le fichier index.php avec l’argument exec en chaine de get :

  • il va chercher le fichier exec/truc.php
  • il cherche dedans la fonction exec_truc()
  • il cherche dedans la fonction exec_truc_dist()

Par défaut exec_truc_dist() est défini dans le fichier exec/truc.php de spip, ce qui permet, en définissant sa fonction exec_truc() de personaliser le actions de truc sans toucher au script truc.php de spip.

Comment cela marche-t-il en pratique ?

Include_fonction(’truc’) C’est la première fonction appelée pour gérer cette demande. C’est elle qui regroupe toutes les actions pour savoir quelle fonction exécuter, quel fichier charger pour assurer l’action ’truc’
- regarde si la fonction exec_truc est déjà définie
- sinon cherche le fichier exec/truc via la fonction include_spip ci-dessous
- regarde si la fonction exec_truc est définie -> dit que c’est celle la que l’on veut utiliser
- regarde si la fonction exec_truc_dist est définie -> c’est cette fonction que l’on veut utiliser

Les inclusions des fichiers php de SPIP via include_spip() Par exemple include_spip(’inc/charsets’). Elle passe par la fonction find_in_path ci-dessous pour chercher le fichier au bon endroit

La fonction include_ecrire(’inc_charsets’) qui était utilisé en <=183 reste accepté pour compatibilité des scripts, mais est moins rapide car elle doit assurer le changement de convention de nommage.

Ou index.php va-t-il chercher truc.php ?

Par défaut, il trouve le fichier exec/truc.php dans ecrire. Mais ce fichier n’est pas cherché uniquement à cet endroit.

La fonction find_in_path(’exec/truc.php’) est chargée de trouver le fichier. Elle est utilisée à chaque recherche d’un fichier de SPIP (squelettes, fichiers de langues, charset, …)

Cette fonction cherche les fichiers dans l’ordre :

  • Dans $dossier_squelette qui est une variable personalisée éventuellement par l’utilisateur pour indiquer où sont rangés ses squelettes
    • Truc : il est possible de définir plusieurs répertoires dans cete variables en les séparant par des :
      • Ex : $dossier_squelettes=’squelettes:autres:perso’
  • Dans squelettes/
  • À la racine : ./
  • Dans formulaires/
  • Dans dist/
  • Dans ecrire/

Donc il est possible de ’remplacer’ l’usage d’un fichier natif de SPIP comme exec/truc.php en définissant son propre exec/truc.php dans un des dossiers squelettes, ou à la racine (ou dans un dossier plugins, ce sera abordé ultérieurement)

En résumé

En résumé, on peut modifier le comportement d’origine de la requête ?exec=truc

  • en définissant sa propre fonction exec_truc() dans un fichier mes_options.php par exemple. Cette fonction peut faire ses propres traitement, ou/et ensuite réinclure le fichier d’origine pour appeler la fonction d’origine.
  • en définissant son propre fichier exec/truc.php et y définir la fonction exec_truc().
Retour en haut de la page

4 Messages de forum

Voir toute la discussion

  • Répondre à ce message

    11 septembre 2006 19:51 , par cy_altern

    pour les feignants : une petite bidouille pour ne pas avoir à déterminer quels sont les fichiers de /ecrire/exec/ à intégrer (et diminuer le nombre d’include inutiles),

    // inclure uniquement le fichier exec dont a besoin
      $exec = _request('exec');
      if (in_array($exec,array('truc_1','truc_2','truc_3'))) {
         include('exec/'.$exec.'.php');
      }

    il suffit donc de faire la liste de tous les fichiers (articles.php, articles_edit.php, rubriques.php...) qui seront modifiés dans le array() : seul celui qui est en cours d’affichage sera chargé.

  • Répondre à ce message

    11 septembre 2006 18:44 , par cy_altern

    Un petit addendum qui évitera l’arrachage des cheveux des codeurs de plugins modifiant l’espace privé...

    Dans le début de la partie "Comment cela marche-t-il en pratique ?", il est dit :

    Include_fonction(’truc’) C’est la première fonction appelée pour gérer cette demande. C’est elle qui regroupe toutes les actions pour savoir quelle fonction exécuter, quel fichier charger pour assurer l’action ’truc’

    * regarde si la fonction exec_truc est déjà définie

    ce qui offre effectivement la possibilité de redéfinir la fonction exec_truc() dans un plugin (sans avoir à copier tout le fichier /exec/truc.php dans le plugin, donc allège considérablement la maintenance du plugin lors des mises à jour de spip).

    Mais, pour que cette solution fonctionne il est OBLIGATOIRE de faire un include préalable du fichier truc.php original (/ecrire/exec/truc.php) afin de disposer de l’ensemble des fonctions nécessaires pour le bon fonctionnement de truc.php.

    Néanmoins cet include NE peut PAS être fait en utilisant la fonction include_spip() puisque (je cite ESJ qui m’a très efficacement et rapidement dépanné) :

    "Ce fichier ne peut etre inclus par "include_spip", car celui-ci va repartir de find_in_path, trouver d’abord celui qu’il vient déjà de charger, et donc croire qu’il n’a rien à faire".

    Il FAUT donc faire cette inclusion en utilisant la fonction include() de php, ce qui donne dans cet exemple :

    include(’exec/truc.php’) ;

    Merci ESJ !

    Voir en ligne : pour exemple, voir ce thread sur le forum des développeurs

  • Répondre à ce message

    11 septembre 2006 18:09 , par Iago

    Avant de chercher à la racine du site, juste après les squellettes, find_in_path regarde s’il ne le trouve pas dans les différents dossiers plugins actifs, non ?

  • Répondre à ce message

    28 mars 2006 17:56 , par Loiseau2nuit

    C’est bien mais ca ne fait pas un peu beaucoup de "truc" pour un concept somme toutes assez délicat à comprendre ?

    Oui bon d’accord, il y avait marqué "confirmé", je sais :clindoeil

Répondre à cet article

Retour en haut de la page

Ça discute par ici