Principe général - version archivée

Cet article n’est valable que jusqu’à SPIP 1.8.3 et obsolète à partir de SPIP 1.9. Pour les versions récentes de SPIP, lire ici.

Sa lecture tel quel n’en est pas pour autant inutile. Il faut retenir ce qui est dit pour les fichiers .html, les fichiers .php3 disparaissent et les URL changent.

Tout le contenu d’un site géré sous SPIP est stocké dans une base de données mySQL. Pour présenter ces informations aux visiteurs du site, il faut donc réaliser l’opération qui consiste à lire les informations, à les organiser et à les mettre en page, afin d’afficher une page HTML dans le navigateur Web.

Cette opération est traditionnellement assez pénible :
-  il faut connaître la programmation PHP et MySQL, et écrire des « routines » relativement complexes ;
-  l’intégration de telles routines dans une mise en page HTML élaborée est assez pénible ;
-  il faut prendre en compte des problèmes de performances : le recours systématique à du code mySQL et PHP est gourmand en ressources, ralentit la visite et, dans des cas extrêmes, provoque des plantages du serveur Web.

SPIP propose une solution complète pour contourner ces difficultés :
-  la mise en page du site est effectuée au moyen de pages HTML nommées squelettes, contenant des instructions simplifiées permettant d’indiquer où et comment se placent les informations tirées de la base de données dans la page ;
-  un système de cache permet de stocker chaque page et ainsi d’éviter de provoquer des appels à la base de données à chaque visite. Non seulement la charge sur le serveur est réduite, la vitesse très largement accélérée, de plus un site sous SPIP reste consultable même lorsque la base mySQL est plantée.

Pour chaque type de document, un couple de fichiers

L’intérêt (et la limite) d’un système de publication automatisé, c’est que l’on ne va pas redéfinir une interface différente en HTML pour chaque page isolée. Par exemple, tous les articles bénéficieront de la même interface ; le système placera simplement des informations différentes dans cette même mise en page (on verra plus loin que SPIP autorise cependant une certaine souplesse).

L’avantage de cette manière de procéder est évident : on définit un format-type (squelette) pour, par exemple, tous les articles, et le système fabriquera chaque page individuelle en plaçant automatiquement le titre, le texte, les liens de navigation... de chaque article.

Pour chaque type de document, SPIP vous demande deux fichiers : un fichier .php3 et un fichier .html. Lors de l’installation de SPIP, vous trouverez ainsi les couples : « article.php3 / article.html », « rubrique.php3 / rubrique.html », etc.

Vous pouvez naturellement modifier ces couples, et en créer d’autres. Depuis [SPIP 1.8.2], néanmoins, il existe un fichier page.php3 utilisable pour tous les types de documents que l’on pourra créer.

Le principe de fonctionnement du cache

L’appel d’une page spécifique se fait par l’intermédiaire du fichier PHP. Par exemple, pour appeler l’article n°5, l’URL correspondante est : http://www.monsite.net/article.php3?id_article=5

image 400 x 337

1. Le fichier appelé est donc article.php3, avec en paramètre id_article=5.

2. Le fichier article.php3 est un fichier PHP ; sa première tâche consiste à vérifier dans le dossier /CACHE sur votre serveur, s’il existe déjà un fichier correspondant à cet article.

2bis. Si un tel fichier existe dans /CACHE, article.php3 vérifie sa date de création. Si ce fichier est suffisamment récent, il le retourne directement à l’utilisateur. Le processus de consultation est alors terminé.

3. S’il n’existe pas un tel fichier dans /CACHE (première visite sur cet article, par exemple), ou si son âge est trop ancien, SPIP démarre le calcul de cette page.

4. C’est alors la page article.html qui est chargée et analysée. Cette page contient la mise en page correspondant à ce type de document. Il s’agit de HTML complété d’indications permettant de placer les éléments tirés de la base de données. En fonction des éléments requis par article.html, SPIP va chercher les informations nécessaires tirées de la base de données mySQL et les insérer aux endroits prévus.

5. Un fichier est ainsi fabriqué par article.php3, à partir de la description contenue dans article.html, avec les éléments tirés de la base de données. Ce fichier est alors sauvegardé dans le dossier /CACHE et renvoyé au visiteur.

Lors d’une visite suivante, si le délai entre les deux visites est suffisamment court, c’est donc ce nouveau fichier stocké dans /CACHE qui est retourné, sans avoir à faire un nouveau calcul à partir de la base de données. En cas de plantage de la base de données, c’est forcément le fichier en cache qui est retourné, même s’il est « trop âgé ».

Remarque. On voit ici que chaque page du site est mise en cache individuellement, et chaque recalcul est provoqué par les visites du site. Il n’y a pas, en particulier, un recalcul de toutes les pages du site d’un seul coup à échéance régulière (ce genre de « grosse manoeuvre » ayant le bon goût de surcharger le serveur et de le faire parfois planter).

Le fichier PHP

Le fichier « .php3 » est très simple. Par exemple, article.php3 contient uniquement :

Son seul but est donc de fixer deux variables ($fond et $delais) et d’appeler le fichier qui déclenche le fonctionnement de SPIP (inc-public.php3).

La variable $fond est le nom du fichier qui contient la description de la mise en page (le squelette). Ici, puisque $fond="article", le fichier de description sera contenu dans article.html [1]. Notez bien que, dans la variable $fond, on n’indique pas la terminaison « .html ».

Remarque. L’intérêt de choisir soi-même le nom du fichier de squelette (que l’on aurait pu déduire automatiquement du nom du fichier .php3) est, si nécessaire, d’utiliser un autre nom. Cela pour ne pas écraser, éventuellement, des fichiers HTML qui subsisteraient d’une ancienne version du site que l’on ne souhaite pas supprimer. S’il existe, d’une ancienne version du site, un fichier article.html que l’on ne souhaite pas effacer, on utilisera par exemple un fichier squelette pour SPIP intitulé article-nouveau.html, et on fixera dans article.php3 :
$fond="article-nouveau".

La variable $delais est l’âge maximum pour l’utilisation du fichier stocké en /CACHE. Ce délai est fixé en secondes. Un délai de 3600 correspond donc à une heure ; un délai de 24*3600 est donc de 24 heures.

On jouera sur cette valeur en fonction de la fréquence des ajouts de contenu du site (nouveaux articles, nouvelles brèves...). Un site actualisé plusieurs fois par jour pourra adopter un délai d’une heure ; un site publiant quelques articles par semaine pourra adopter un délai nettement plus long. De même, le contenu des pages est important : si vous insérez la syndication du contenu de sites fréquemment mis à jour, vous souhaiterez sans doute adapter votre propre délais à celui des sites référencés.

Remarque. Certains webmestre succombent à la tentation de fixer des délais dérisoires (quelques secondes), pour que le site corresponde très exactement, à chaque instant, aux dernières modifications de la base de données. Dans ce cas, vous perdez tous les avantages du système de cache : les visites sont nettement ralenties et, à l’extrême, sur des sites très fréquentés, vous pouvez provoquer des plantages de la base de données (ou vous faire virer par votre hébergeur parce que vous monopolisez la puissance de sa machine...).
Remarque. Une autre raison qui semble pousser les webmestres à fixer des délais très courts est la présence des forums sur leur site. En effet, pour que les contributions s’affichent dès qu’elles sont postées, ils pensent nécessaire de réduire le délais de recalcul. C’est inutile : SPIP gère cet aspect automatiquement ; lorsqu’une contribution à un forum est postée, la page correspondante est effacée du cache, et recalculée immédiatement, quel que soit le délai fixé pour cette page.

Depuis [SPIP 1.8.2], on peut utiliser un même fichier .php3 pour tous les squelettes. Il s’agit du fichier page.php3 qui est à la racine du site. Il est un peu plus complexe que celui décrit ci-dessus, mais il joue le même rôle. Lorsqu’on l’utilise, les variables $fond et $fond peuvent être passées en paramètres, par exemple : http://www.monsite.org/page.php3?fond=monsquelette&id_rubrique=12

Le fichier HTML

Dans SPIP les fichiers .html sont appelés les squelettes. Ce sont eux qui déterminent de la mise en page.

Ces fichiers sont rédigés directement en HTML, auquel on ajoute des instructions permettant d’indiquer à SPIP quels éléments il doit extraire de la base de données et où il devra les placer (du genre : « placer le titre ici », « indiquer à cet endroit la liste des articles portant sur le même thème », etc.).

Les instructions de placement des éléments sont rédigées dans un langage spécifique, qui fait l’objet du présent manuel d’utilisation. Ce langage constitue par ailleurs la seule difficulté de SPIP.

« Encore un langage ? » Hé oui, il va vous falloir apprendre un nouveau langage. Il n’est cependant pas très compliqué, et il permet de créer des interfaces complexes très rapidement. Par rapport au couple PHP/mySQL, vous verrez qu’il vous fait gagner un temps fou (surtout : il est beaucoup plus simple). C’est un markup language, c’est-à-dire un langage utilisant des balises similaires à celles du HTML.

Remarque. De la même façon que l’on apprend le HTML en s’inspirant du code source des sites que l’on visite, vous pouvez vous inspirer des squelettes utilisés sur d’autres sites fonctionnant sous SPIP. Il suffit d’aller chercher le fichier « .html » correspondant. Par exemple, vous pouvez voir le squelette des articles d’uZine (visualisez le code source pour obtenir le texte du squelette).

Une interface différente dans le même site

Tout d’abord, notez qu’il est possible de créer des couples de fichiers pour le même élément logique (articles, rubriques, ...). Par exemple, vous pouvez créer des fichiers pour visiter un même article avec des interfaces différentes : article.php3/html pour le format normal, imprimer.php3/html pour le même article dans un format adapté à l’impression, article-texte.php3/html pour l’article dans un format texte (adapté aux mal-voyants par exemple), article-lourd.php/html avec une interface lourdingue adaptée au haut-débit, etc.

-  Une interface différente selon les rubriques. Vous pouvez, pour un même type de document, créer des squelettes différents selon les rubriques du site. Il s’agit de créer simplement de nouveaux fichiers .html en fonction des rubriques (inutile, ici, de modifier le fichier .php3, on se contente de jouer sur les noms des fichiers squelettes).

Il suffit de compléter le nom du fichier squelette de « -numéro » (un tiret suivi d’un numéro de rubrique). Par exemple, si vous créez un fichier : article-60.html, tous articles contenus dans la rubrique n°60 utiliseront ce squelette (et non plus le squelette par défaut article.html). Notez bien : le numéro indiqué est celui d’une rubrique. Si cette rubrique 60 contient des sous-rubriques, les articles contenus dans ces sous-rubriques utiliseront également le nouveau squelette article-60.html.

Remarque. Dans notre exemple, on aura certainement également intérêt à créer un rubrique-60.html, voire un breve-60.html, etc. pour accompagner le changement de mise en page de cette rubrique.

-  Une interface pour une seule rubrique. (SPIP 1.3) On peut créer une interface qui s’applique à une rubrique, mais pas à ses sous-rubriques. Pour cela, il faut créer un fichier : article=60.html, qui s’appliquera uniquement aux articles de la rubrique 60, mais pas à ses sous-rubriques.

Que peut-on mettre dans un fichier HTML

Les fichiers HTML sont essentiellement des fichiers « texte », complétés d’instructions de placement des éléments de la base de données.

SPIP analyse uniquement les instructions de placement des éléments de la base de données (codées selon le langage spécifique de SPIP) ; il se contrefiche de ce qui est placé dans ce fichier et qui ne correspond pas à ces instructions.

Leur contenu essentiel est donc du HTML. Vous déterminez la mise en page, la version du HTML désiré, etc. Vous pouvez évidemment y inclure des feuilles de style (CSS), mais également du JavaScript, du Flash... en gros : tout ce qu’on place habituellement dans une page Web.

Mais vous pouvez également (tout cela n’est jamais que du texte) créer du XML (par exemple, « backend.php3/html » génère du XML).

Plus original : toutes les pages retournées au visiteur sont tirées du /CACHE par une page écrite en PHP. Vous pouvez donc inclure dans vos squelettes des instructions en PHP, elles seront exécutées lors de la visite. Utilisée de manière assez fine, cette possibilité permet une grande souplesse à SPIP, que vous pouvez ainsi compléter (par exemple ajouter un compteur, etc.), ou même faire évoluer certains éléments de mise en page en fonction des informations tirées de la base de données.

Notes

[1Si article.html n’existe pas, le fichier « dist » est pris à la place. Lire à ce propos « Qu’est-ce que les fichiers « dist » ? ».

Portfolio

Auteur L’équipe de SPIP Publié le : Mis à jour : 26/10/12

Traductions : عربي, català, Deutsch, English, Español, français, italiano