Au début il y a le squelette
Supposons donc un squelette dans lequel se mêlent avec allégresse les instructions de diverses natures : HTML bien sûr, SPIP aussi, mais aussi PHP et Javascript.
Bien sûr, dans un coin du site, il y a aussi la base de données MySQL qui contient les infos « contenu » des articles.
Puis souffle le vent dans le cache
Ensuite il faut savoir qu’il y a un cache avec SPIP : chaque page est précalculée lors de son premier affichage. Ce résultat est stocké dans le cache, et c’est ce cache qui est ensuite appelé pour affichage.
La moulinette SPIP ne fait QUE traiter le code SPIP. Pour chaque boucle, SPIP interroge la base de données et génère en ligne le résultat (développé) correspondant aux réponses de la requête générée par la boucle et appliquée à la base de données.
A bord du cache
Dans le cache, il n’y a plus aucune instruction SPIP, car elles ont toutes été calculées. Par contre, il y a encore tout le code PHP et Javascript qui est traité par SPIP exactement comme du simple texte, au même titre que du HTML.
Il y a 2 conséquences à cela :
si du code PHP ou jajascript est contenu dans les critères d’une boucle, il ne sera PAS exécuté et ne pourra PAS être pris en compte dans le calcul de la boucle. Le résultat sera donc erroné.
si du code PHP ou jajascript est contenu à l’intérieur du corps d’une boucle, il sera dupliqué en autant d’exemplaires que la boucle fera d’itérations, exactement comme tout le reste du contenu. Il s’exécutera donc à chaque fois.
Pour l’affichage
C’est le contenu du cache qui est appelé.
Le contenu PHP s’exécute sur le serveur et génère la page que reçoit le navigateur de l’utilisateur (c’est pour lui qu’on fait tout ça, faut pas l’oublier !).
le contenu Javascript s’exécute dans le navigateur.
Ouf !
En conclusion
Pour bien mélanger PHP, Javascript et SPIP, il faut se souvenir de l’ordre de préséance entre eux :
SPIP d’abord développe les boucles
le cache mémorise ce résultat intermédiaire
PHP exécute le cache et sert la page
Javascript s’exécute dans le navigateur
Le motto ce serait donc :






