Carnet Wiki

LaGestionDuCache

Version 2 — Mars 2007 NicolasR

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.