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