Initiation aux squelettes SPIP

Damien Raude-Morvan - <drazzib@drazzib.com>

Organisation des squelettes de SPIP

Les fichiers squelettes sont présent dans le dossier : /dist/ Chaque fichier .html représente un gabari pour une « vue » de SPIP. On y trouve :

Utiliser ses propres squelettes

ou « /dist/, c'est bien, mais y a mieux »

Priorité des dossiers de squelettes

  1. liste de dossiers désignés dans variable $dossier_squelettes, si celle-ci est définie
  2. ensuite dans le dossier squelettes/ situé à a racine du site
  3. liste de dossiers de la variable $plugins
  4. racine du site
  5. répertoire dist/
  6. répertoire ecrire/
On peut copier uniquement certains fichiers de /dist/ dans notre /squelettes/ : SPIP saura retomber sur ces pattes

Exemple de squelette

Squelette simple qui permet d'afficher un article :

<html>
<body>
<BOUCLE_un_article(ARTICLES){id_article}>
  <h1>#TITRE</h1>
  <b>#CHAPO</b>
  <div align="justify">#TEXTE</div>
</BOUCLE_un_article></body>
</html>

Dans la boucle ci-dessus le parametre id_article provient de l'URL

spip.php?page=article&id_article=8

Fabrication d'une page par SPIP

  1. Identification de la « vue » demandée : http://monspip/spip.php?page=article&id_article=1
  2. Chargement du squelette associé : article.html
  3. Passage de la valeur du paramètre id_article au squelette
  4. Declenchement par le squelette des accès en base de données : ARTICLE=1
  5. Remplacement des fragments dynamiques du squelette par les valeurs lues en base de données : #TITRE, #INTRODUCTION, #TEXTE
  6. Enregistrement de la page générée dans le cache SPIP : /tmp/cache/A/dfksdf.html
  7. Envoi de la page au navigateur web.

La notion de boucle de SPIP

La notion de base du langage de SPIP est donc la boucle.
SPIP s'appuie sur une base de données pour stocker les articles, les rubriques - bref tout votre site
SPIP doit extraire des listes d'éléments (Articles, Rubriques) pour les afficher sur le site. C'est ici qu'intervient la boucle qui permet de :

Structure d'une boucle

BOUCLE : OBJET « liste des articles » + CRITERE « de cette rubrique »

BALISE : afficher ici le titre de l'article

BALISE : afficher la date + FILTRE « uniquement le mois et l'année »

BALISE : afficher le sous-titre

BALISE : afficher le texte de l'article

Fin de la BOUCLE

Le système de boucle permet, dans un code unique : - d’indiquer à quel endroit du code HTML on a besoin de quel type d’élément (à tel endroit on veut récupérer la liste des articles, à tel endroit on veut inclure la liste des sous-rubriques...) - de prévoir l’affichage d’un élément unique - d’indiquer comment est affichée une liste de plusieurs éléments - de déterminer ce qu’on affiche lorsqu’il n’y a aucun élément correspondant.

Sélectionner ou trier les données : criteres

Certains critères s'appliquent à toutes les boucles. Ils permettent :

Affichage d’une partie des résultats

Afficher les données par rapport à une date

Exemples :

Classer les résultats

Classement des elements par un critère au choix :
{par critère_de_classement}
Exemples :

Afficher les données sélectionnées : les balises

Utilisation des balises

Balises génériques

Certaines balises sont utilisables dans l'ensemble du site, et ne sont pas liées à un contexte particulier.

Balises spécifiques aux articles

<BOUCLE_une(ARTICLES)>
    <h4><a href="#URL_ARTICLE">#TITRE</a></h4>
</BOUCLE_une>

Transformer les données : filtres de SPIP

Les filtres permettent d'effectuer un ou des traitements sur les balises
[ texte... (#BALISE|filtre1|...|filtren) texte... ]
Les filtres 1, 2 jusque n sont appliqués successivement à la suite les un des autres.

Filtres sur le texte

Filtres sur les dates

Filtres sur les images

Créer ses propres filtres

Dans $dossier_squelette/mes_fonctions.php :
<?php
function mon_filtre($texte){
   $texte = (bidouillages en PHP) ...;
   return $texte;
}
?>
Dans $dossier_squelette/article.html
[(#TEXTE|mon_filtre)]

CSS de SPIP

Les styles CSS de SPIP sont organisés en plusieurs fichiers :

SPIP et le multilinguisme

Trois niveau de configuration disponibles :

Obtenir les traductions d'un article

Il faut utiliser le critère {traduction} afin d'afficher les traductions de l'article courant :
...BOUCLE principale...
<BOUCLE_autres_traduction(ARTICLES){traduction}{exclus}>
[<a href="#URL_ARTICLE" rel="alternate" hreflang="#LANG">(#LANG|traduire_nom_langue)</a>]
</BOUCLE_traductions>
.../BOUCLE principale...

Traduire des libellés

Il faut créer un fichier $dossier_squelettes/local_[code].php (ex: local_fr.php) :
<?php
$GLOBALS[$GLOBALS['idx_lang']] = array(
  'bonjour' => 'Bonjour'
);
?>
Dans le squelette, on peut ensuite utiliser le code :
<:bonjour:>

Les modeles SPIP

Modèles de SPIP : fragments de squelettes réutilisables. Ils sont présents dans le dossier : /dist/modeles/

Aller plus loin