Carnet Documentation SPIP

LaGestionDuCache

SPIP - Contrib :: Carnet SPIP :: Carnet Documentation SPIP :: Derniers changements :: Recherche :

LaGestionDuCache

Approche pas le haut

Peut être que ce qui embrouille c’est de parler en terme de variable php alors qu’on a l’abstraction SPIP et qu’on devrait pas s’en faire du php :D

SPIP marche comme cela : il y a N fichiers CACHE pour chaque squelette (y compris les inclures). Chacun correspond au calcul du squelette avec les variables d’environements (ou alors de contexte).

Pour une page normale (que le visiteur accede), les variables d’environements sont les variables d’url (les GET du http) et c’est tout => on n’a pas accès aux variables POST du coup.

Par exemple, si on a une page article.php3/article.html que le visiteur accede avec article.php3 ?id_article=XX et qu’on a 10 articles. Alors il y aura au maximum 10 fichiers de CACHE différents pour ce squelette, correspondant à : article.php3 ?id_article=1 article.php3 ?id_article=2 ... article.php3 ?id_article=10

Pour un squelette inclus, les variables d’environements sont les variables passées à la balise de SPIP (les GET ne sont donc pas accessible dans un inclure sauf si elles sont explicitement passées au inclure)

Par exemple, si j’ai un entête que j’appelle : dans mon squelette article et dans mon squelette rubrique

et que j’ai 10 articles et 5 rubriques, alors il y aura au maximum 15 fichiers de CACHE différents pour ce squelette, correspondant à : ... ...

C’est pour ça que quand on fait un inclure, il faut bien réfléchir à ne pas passer des variables redondantes. Par exemple, si dans ma page article, j’inclus l’entête de la façon suivante : alors j’aurais (potentiellement) au maximum 55 (10x5+5) fichiers de CACHE pour ce squelette correspondant à : ... ... ... ...

alors qu’inclure l’id_article suffit puisqu’on peut déduire l’id_rubrique depuis là. (remarquez que ce n’est qu’un nombre potentiel, SPIP ne crée les fichiers de cache que s’il y a une demande pour ce fichier)

Approche par le bas

Tans qu’il s’agit de variables par la méthode GET, le cache s’applique. Ce que disais Fil dans un récent échange concerne l’incompatibilité des variables POST avec le cache.

Pour passer maintenant à l’INCLURE, c’est là qu’intervient l’utilisation de $contexte_inclus. En regardant en mode debug en peut facilement repérer que tous les éléments passés dans l’url deviennent des variables d’environnement, récupérables par #ENVnom_de_la_variable. Ceci est valable pour le squelette principal. Toujours en mode debug on voit que #ENV dans l’environnement de l’inclure est vide.

Si on indique dans le .php correspondant de l’INCLURE : $contexte_inclus[’nom_de-la_variable’]=$_GET[’nom_de-la_variable’] ; #ENVnom_de_la_variable est maintenant renseigné à l’intérieur de l’INCLURE à partir de la valeur passée dans l’url du squelette principal. Par cette méthode tu peux passer n’importe quelle valeur est l’utiliser dans des tests à l’intérieur du .html sans une ligne de php.