En effet, SPIP effectue deux passes sur le calcul des pages :
- pour interpréter les squelettes, et pré-générer le fond de page en php exécutable,
- pour calculer à partir de ce pré-squelette généré, la page dynamique [1] à envoyer en HTML .
Ces deux étapes permettent de mieux comprendre comment appeler une page programmée, au sein des squelettes.
Spip recherchera un fichier de dossier/nom.extension donnée, dans un éventail de dossiers, s’arrêtant au premier trouvé dans l’ordre précis :
dans le dossier ./squelettes défini par l’utilisateur,
dans les divers dossiers squelettes des plugins, puis des plugins-dist, en respectant les dépendances d’utilisation [2] et sinon par ordre alphabétique des préfixes [3]..
dans les répertoires natifs ./squelettes-dist ou ./privé.
Bien évidement, l’indication d’un sous-dossier forcera la recherche a se positionner à chaque fois dans le sous-dossier homonyme des chemins ci-dessus.
1. Interprétation des Squelettes
Les squelettes interprétés par SPIP sont obligatoirement des fichiers d’extension HTML (non significative [4]), récupérés :
par l’appel direct d’une URL de page
- soit par un lien <a href="">..</a> d’une page déjà appelée,
- soit par un lien ?page=.. (calculé automatiquement par la balise #URL_PAGE) faisant appel au squelette principal de la page [5].
par la détection d’une balise Spip d’inclusion <INCLURE{fond=..}> ou #INCLURE{fond=..}, avec le même principe (sans préfixe Z), pour intégrer d’autres noisettes !
Si aucun fichier correspondant n’est trouvé dans cette phase, Spip arrete son travail en vous donnant un panneau d’avertissement "squelette non trouvé" !
Si le fichier trouvé possède une extension différente de .html, il n’est pas interprété par Spip (à savoir que d’éventuelles balises SPIP n’y seront pas traduites), mais néanmoins ajouté au généré...
En particulier, une inclusion .php (include('truc.php'); n’est pas exécutée à ce niveau, mais l’instruction php figure déjà dans le généré disponible pour la seconde passe.....
Ce processus est relancé pour chaque page-type, si vous utilisez le paramètre &var_mode=recalcul.
Le résultat obtenu -un source php, avec les requêtes SQL préparées, prêt à l’interprétation- est stocké dans un premier cache interne : le cache de squelettes. Chaque page pourra être calculée à partir de ce source-programme, en fonction des paramètres identifiants les valeurs-clés à lire dans la base de données.
2. Calcul de la page dynamique
L’appel d’une page Internet précise généralement des valeurs d’id_article ou autres valeurs-clé, qui seront utilisées pour produire la page finale [6] en html ’propre’ : celle-ci est transmise au visiteur, et stockée en cache (pour pouvoir être servie rapidement lors d’une prochaine demande, ou si l’accès a la base de données est perdu. .
Ce calcul de page effectue réellement les requêtes à la base de données, avec les valeurs paramétrées à l’appel, pour insérer le texte des enregistrements lus, à la place définie initialement par les balises de champ dans le squelette. : ce résultat est également mis en cache de page en même temps qu’il est servi au visiteur ; à une prochaine visite sur le site, cette page "cachée" sera eservie directement par SPIP sans aucun calcul, sous réserve d’être encore dans la durée de validité donnée en #CACHE. A cette occasion, les instructions .php éventuellement insérées sont aussi évaluées.... et c’est là qu’apparaissent ces erreurs EVAL’ que vous avez peut-être déjà vues..
Quelques compléments sur le cache SPIP
L’intégration native d’un double système de cache des pages dans SPIP représente un avantage très spécifique, notable en termes de résistance a la charge serveur...
attention à la multiplication des caches introduites par la gestion de l’environnement, surtout pour tenir compte des visiteurs authentifiés (cf. #SESSION), encore amplifiée par la fragmentation introduite par les multiples noisettes d’un systeme Z ou noiZetier..
dans le cas d’une utilisation des préprocesseurs CSS, il faut rajouter en amont un calcul préalable des fichers CSS, automatisé par le plugin LESS-CSS->https://contrib.spip.net.
Les erreurs signalées par SPIP
Si le squelette principal demandé n’est pas trouvé (il n’existe pas !), l’erreur est assez facile à comprendre :

- erreur de squelette : page inconnue
vous remarquerez les boutons spéciaux dans le bandeau d’administration !

Article publié le 24 avril 2013, et actualisé en février 2019 .
Répondre à cet article