Africa Computing -

Rubrique : Accueil > Création Web > Utilisation du système de gestion de contenu SPIP
 

Chapitre 6 : Utilisation du système de gestion de contenu SPIP





6.1. Pourquoi utiliser SPIP ?



6.1.1. Les systèmes de gestion de contenu Web

Inconvénients des sites statiques classiques :

Les premiers sites Web étaient réalisés par des équipes de passionnés utilisant majoritairement des éditeurs HTML (dreamweaver, frontpage, voire un simple éditeur de texte) pour créer des pages. A cette époque héroïque où le webmestre était l’homme à tout faire du site, les fonctions de création et de maintenance étaient la plupart du temps confondues. Si la tâche de création s’avère souvent gratifiante, la tâche de maintenance apparaît rapidement comme une tâche extrêmement fastidieuse, sans réelle valeur ajoutée et nécessitant énormément de temps, ce qui peut placer le webmestre dans une position fort délicate (au lieu de produire des sites, le webmestre passe l’essentiel de son temps à maintenir les sites existants).

De plus, dès que le site devient important, de nombreux problèmes techniques apparaissent. Par exemple, il devient difficile de réorganiser le site ou de faire évoluer son architecture (ou du moins sans avoir à recourir à de fastidieux copier coller, à une vérification exhaustive des liens, etc..). De plus les outils d’édition de pages HTML tels que Dreamweaver sont trop compliqués pour permettre de déléguer la production des pages aux personnes qui détiennent l’information.

Approches alternatives aux sites statiques :

Pour répondre aux problèmes rencontrés avec les sites statiques, deux approches ont été développées :

  1. Tout d’abord organiser les sites à partir de bases de données : cette approche bien qu’efficace manque de souplesse et nécessite pour interfacer les pages avec les bases de données de gros travaux de codage avec des langages tels que Perl, PHP ou encore ASP.
  2. Utiliser des logiciels de Web Content Manager (gestion de contenu web en français) désignés dans le jargon informatique par CM (Content Manager) ou encore CMS (Content Manager System). Les CMS permettent à des utilisateurs ne disposant pas de compétences techniques pointues (c’est-à-dire des utilisateurs normaux) de produire le contenu des pages à partir d’un simple navigateur Web ; le codage du site Internet à partir des contenus étant entièrement automatisé.

Précisons que la seconde approche constitue la suite logique de la première. Nous n’allons pas entrer ici dans le détail des objectifs et caractéristiques fonctionnelles des CMS mais vous l’avez sans doute compris, SPIP appartient à la catégorie des systèmes de gestion de contenu. Le principal intérêt des CMS est de permettre à ce que la production de contenu s’effectue par les détenteurs de l’information et non plus par les webmestres. De plus, le fait de séparer la forme (l’interface des pages) et le fond (le contenu) permet de réorganiser à tout moment l’ergonomie ou l’architecture du site sur avoir à intervenir sur le contenu.

L’utilisation d’un CMS nécessite un changement culturel : on passe d’une gestion centralisée par le webmestre à une gestion collaborative entre rédacteurs. De plus, il convient d’apprendre aux producteurs de l’information à utiliser le système et respecter les règles qui sont imposées par le webmestre afin de permettre la cohérence de l’ensemble.



6.1.2. Positionnement de SPIP parmi les différents CMS

Les premiers systèmes de gestion de contenus qui sont apparus sont des logiciels commerciaux (filenet, vignette, broadvision, documentum, reef, etc...). Du fait de leur antériorité, ce sont les solutions les plus utilisées pour les gros sites professionnels. Outre leurs coûts élevés, la plupart des solutions commerciales sont des logiciels très lourds à mettre en place qui requièrent une expertise pointue en développement (ce qui permet à leurs éditeurs de vendre des prestations pour leurs mises en place). De plus ces solutions nécessitent la mise en œuvre d’un serveur dédié.

Depuis peu, des solutions libres en open source sont apparues, ce qui a créé une véritable dynamique dans le domaine. Le précurseur dans le domaine est probablement phpNuke qui permet de créer un véritable portail en quelques minutes sans aucune connaissance technique. Toutefois, la personnalisation d’un site réalisé avec phpNuke est limitée (tous les sites se ressemblent avec leurs 3 colonnes) et cette solution s’apparente plus à une solution de portail qu’à une véritable solution de CMS.

Les ténors des CMS en open source sont ZOPE et SPIP.

ZOPE se situe entre le serveur d’applications et l’outil de gestion de contenu. Développé en Python, ZOPE est plus abouti techniquement que SPIP mais est également plus difficile à mettre en œuvre et nécessite de pouvoir disposer d’un serveur dédié. Développé en PHP, SPIP se distingue de ZOPE par l’extrême rapidité de mise en service. SPIP est idéal pour une gestion communautaire d’un site Web, typiquement pour la création de sites Web de type magazines.

SPIP possède de nombreux atouts qui en font une solution tout à fait adaptée pour beaucoup de sites Web de moyenne envergure. L’installation de SPIP est automatique et est entièrement prêt à l’emploi : nous pouvons ainsi réaliser un site avec SPIP sans aucune connaissance technique mais si en tant que webmestre, nous souhaitons réaliser un site réellement adapté aux besoins de nos clients et avec une ergonomie originale et personnalisée, il est nécessaire de se pencher sur les mécanismes nécessaires pour réaliser les pages qui serviront de modèles au site. C’est ce que nous allons étudier dans les chapitres qui suivent.

Références :

L’explosion du "Web Content Management" - Veblog
Gestion de contenu : le logiciel libre séduit par sa simplicité - 01net
Tableau comparatif de quatre logiciels coopératifs - I3C


6.2. A la découverte de SPIP

SPIP comme tous les CMS comporte une partie publique (le site visible par les internautes) et une partie privée réservée aux personnes chargées de la gestion du site, c’est à dire de l’alimenter et de le mettre à jour. Dans ce chapitre, nous allons nous intéresser à l’utilisation de la partie privée pour publier et organiser le contenu du site public. La personnalisation et l’adaptation du site public à nos besoins seront traités dans le chapitre suivant.

6.2.1. Articles, rubriques et arborescence d’un site SPIP

Lorsqu’on utilise SPIP, l’ajout de contenu se fait non plus en concevant une page à partir d’un éditeur HTML mais en insérant dans la base de donnée de SPIP un article. La terminologie article désigne la même terminologie qu’un article publié dans un journal c’est-à-dire une composition comprenant du texte mais également des éléments graphiques. Un article doit nécessairement être placé dans une rubrique, la terminologie rubrique désignant également la même notion que pour un journal papier. On peut imaginer à titre d’exemple une rubrique "actualités internationales" contenant différents articles traitant d’événements se déroulant dans le monde.

SPIP permet de gérer un site Web de type magazine (bien qu’avec un peu d’imagination, il soit possible de réaliser n’importe quel type de site mais cela nécessite de développer vos propres "squelettes"). Par magazine, nous entendons un site structuré en rubriques dans lesquelles nous publions des articles. La structure des rubriques constitue l’ossature de votre site et c’est cette structure qui va déterminer son interface, son mode de navigation et les relations entres articles. La structure des rubriques est de type hiérarchique, c’est-à-dire qu’une rubrique peut contenir des sous rubriques qui elles-mêmes, contiennent d’autres sous rubriques, etc.

Construire la structure de son site consiste donc à imbriquer des rubriques et des sous rubriques. La structure hiérarchique a été choisie du fait de son extrême simplicité. Cette simplicité conduit à la principale limitation de SPIP : un article ne peut se trouver que dans une seule rubrique et de ce fait la navigation à travers le site correspond à la structure des rubriques. D’où l’intérêt de bien réfléchir à la structure des rubriques avant de commencer à publier quoi que ce soit. Cependant il existe un mécanisme pour contourner cette lacune : le système des mots-clefs. Les mots-clés offrent un moyen de navigation transversal à l’intérieur du site. En associant un ou plusieurs mots-clés à un article, on dispose d’un moyen de créer des liens avec d’autres articles situés dans d’autres rubriques. Cela permet d’offrir plusieurs modes de navigation : une navigation arborescente qui respecte la structure hiérarchique des rubriques et une navigation thématique, pour par exemple associer à un article la liste des articles traitant d’un sujet connexe.

Résumé :

  • L’objet principal permettant de publier des informations sous SPIP est l’article ;
  • Un article est obligatoirement classé dans une rubrique ;
  • Une rubrique peut contenir autant de sous rubriques que nécessaire et au sein d’une même rubrique, on peut placer autant d’articles que nécessaire ;
  • La navigation à travers le site est dépendante de la structure hiérarchique des rubriques mais il est possible de proposer aux visiteurs plusieurs modes de navigation en s’appuyant sur les mots-clefs.


6.3. Introduction par la pratique à la conception de squelettes SPIP



6.3.1. Un peu de théorie pour commencer !

Principe général :

SPIP utilise un jargon qui lui est propre et qui peut paraître déroutant au début. Ainsi lorsqu’on parle de squelette, cela correspond à la notion de modèle (template en anglais) sur lequel le système va s’appuyer pour générer différentes pages du site.

(GIF)
Un même squelette permet de générer autant de pages que
de données de même type contenues dans la base !

Chaque page d’un site SPIP est générée automatiquement à partir d’un squelette sur lequel vont se greffer des données extraites de la base de données.
On définit un format type ou squelette pour chaque type de document : un squelette pour par exemple l’affichage des articles, un autre pour l’affichage des brèves, un pour l’affichage du plan du site, etc...
En passant en paramètre dans l’URL un numéro d’article au squelette chargé de la mise en page des articles, le système génère autant de pages différentes que d’articles contenus dans la base de données !
En tant que webmestre développeur, vous commencez à comprendre l’intérêt d’utiliser un CMS : des centaines de pages vont être générées automatiquement à partir d’un même modèle dès lors que des rédacteurs publient des articles et les rangent dans des rubriques.

Dans chaque squelette, on spécifie comment le système fabriquera chaque page individuelle à partir des paramètres passés dans l’URL : positionnement automatiquement du titre, du texte, des liens de navigation, etc...
Construire un squelette revient à construire une page HTML dans laquelle on insère des balises spécifiques à SPIP pour préciser quel type de données on souhaite afficher et comment on souhaite les afficher.

Un ou plusieurs traitements uniformisés pour chaque type de document :

L’intérêt 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 correpondant au même type de document. Ainsi tous les articles seront traités de la même manière. Cependant comme nous le verrons plus loin il est également possible de définir plusieurs interfaces pour visualiser un même article : par exemple une interface pour le format normal et une interface pour un format adapté à l’impression.

Deux fichiers doivent être définis pour chaque squelette :

Un squelette s’appuie sur des librairies spécifiques à SPIP, c’est-à-dire qu’à chaque fois qu’on charge une quelconque page d’un site réalisé sous SPIP, du code PHP est chargé au préalable. Ce code - le moteur SPIP - interprète les balises SPIP contenues dans le squelette et effectue les requêtes nécessaires auprès de la base de données. Faire tourner successivement le moteur de SPIP sur le même squelette avec les mêmes paramètres n’a de sens que si les données changent sans cesse ; ce qui est rarement le cas pour la très grande majorité des sites. De plus, il faut se prémunir d’un éventuel plantage du serveur de base de données qui aurait pour effet de rendre indisponible les pages du site.
Pour ces raisons SPIP intègre un système de "cache", c’est à dire un système qui ne regénère une page que lorsqu’un délai est expiré ; délai bien évidemment paramétrable.

Pour construire un squelette, il faut d’abord créer un fichier PHP chargé à la fois d’inclure une partie du code spécifique à SPIP et de gérer le mécanisme de cache. Concrètement si vous souhaitez réaliser un squelette nommé exemple.html , il faut au préalable créer un fichier exemple.php3 de la forme :


<?
$fond = "exemple";
$delais = 3600;
include "inc-public.php3";
?>

Par convention :

  • la variable $fond contient le nom du squelette à appeler sans l’extension .html (ici nous souhaitons appeler le squelette exemple.html mais on peut également imaginer de créer un fichier exemple.php3 chargé d’appeler le squelette toto.html) ;
  • la variable $delais exprimée en secondes (soit 1 heure dans notre exemple) permet de paramétrer la durée de vie d’une page générée : si la page existe et si sa durée de vie n’est pas expirée, on se contente de récupérer la page déjà générée et cachée dans le cache (beau pléonasme qui permet de comprendre le sens du mot cache !), sinon le moteur spip regénère la page (ce qui nécessite plus de temps) ;

Maintenant que nous venons de voir comment écrire le fichier chargé d’appeler un squelette, penchons nous la réalisation des squelettes proprement dite.



6.3.2. Premiers squelettes : des boucles et des balises

Avant de commencer quoi que ce soit, rendez vous dans la partie privée de SPIP et insérez 2 rubriques contenant chacune au moins 2 articles (on peut se contenter d’une seule rubrique mais pour certains exemples, ce sera plus parlant avec 2 rubriques !).

Le langage de description de la mise en page des squelettes dans SPIP est composé de boucles et de balises. D’un point de vue syntaxique, le langage utilisé par SPIP ressemble au langage HTML.

Dans le jargon de spip, une boucle désigne en fait une requête SQL. La syntaxe des boucles permet d’interroger la base de manière extrêmement simplifiée c’est à dire sans avoir à recourir à l’écriture de commandes SQL ni même à écrire du code PHP.

Les balises SPIP quand à elles permettent de préciser les champs de la base que nous souhaitons afficher.

Bien pratique le système des boucles et des balises ! Même si au début cela va vous paraître très déroutant, avec un peu d’entraînement et le "guide du webmestre SPIP" à portée de main, la réalisation de vos propres squelettes ne vous posera rapidement plus de difficultés !

Premier exemple :

Commencez tout d’abord par créer un fichier exemple.php3 tel que décrit dans la section précédente (mais avec $delais=0; pour éviter l’effet de cache lors de 2 expérimentations successives). Puis créez un fichier exemple.html contenant les lignes suivantes :


<HTML>
<BOUCLE_article(ARTICLES){id_article=1}>
   <B>#TITRE</B><BR>#TEXTE<BR><BR>
</BOUCLE_article>
</HTML>

Appelez la page exemple.php3 avec votre navigateur.

Attention ne lancez pas votre navigateur en double cliquant directement sur le fichier exemple.html cela n’aura aucun effet puisqu’il faut tout d’abord passer par l’intermédiaire du fichier exemple.php3, et ensuite parce que pour que le code PHP et les balises SPIP soient interprétés, il est nécessaire de se connecter au serveur Apache couplé avec php et MySQL ! Donc tapez comme URL soit http://127.0.0.1/votre-repertoire-spip/exemple.php3 ou l’URL correspondant au serveur distant (il est fortement conseillé de travailler en local avec votre propre serveur apache pour éviter à recourir sans cesse au FTP ce qui s’avère vite trés fastidieux !)

Le résultat est l’apparition du titre du premier article en gras suivi d’un saut de ligne puis du texte de l’article. Vous remarquerez que nous avons mélangé à la fois du code HTML et du code SPIP.

Comment cela marche-t-il ?

Le code <BOUCLE_article(ARTICLES)> </BOUCLE_article> permet de spécifier qu’on recherche des documents de type ARTICLES dans la base. L’ajout de {id_article=1} permet d’ajouter la condition suivante : on ne veut extraire de la base que l’article dont le numéro est égal à 1. Ensuite la balise #TITRE permet de spécifiquer qu’on souhaite afficher le titre correspondant à l’article sélectionné et #TEXTE, le contenu proprement dit. On peut combiner des balises SPIP et des balises HTML telle que la balise <BR> dans cet exemple qui permet d’ajouter un saut de ligne entre le titre et le texte de l’article.

Ce premier exemple est bien joli mais il ne sert strictement à rien du fait qu’on impose la condition "ce squelette ne s’applique qu’à l’article numéro 1" et donc ne peut pas être utilisé pour afficher un autre article.

Exemple 2 :

Modifiez l’exemple précédant en remplaçant {id_article=1} par {id_article}.

Rentrez maintenant l’URL http://127.0.0.1/votre-repertoire-spip/exemple.php3 ?id_article=2 dans votre navigateur et le tour est joué : vous êtes maintenant capable d’appliquer votre squelette à n’importe quel article de votre base de données SPIP !

Exemple 3 :

Créez le fichier rubrique.html suivant :


<HTML>
<BOUCLE_mesarticles(ARTICLES){id_rubrique}>
   <B>#TITRE</B><BR>#TEXTE<BR><BR>
</BOUCLE_mesarticle>
</HTML>

Avant de visualiser le résulat, vérifiez que vous avez bien un fichier rubrique.php3 pointant sur rubrique.html et éventuellement mettez à 0 le délai d’expiration du cache.

En tappant http://127.0.0.1/votre-repertoire-spip/rubrique.php3 ?id_rubrique=1 dans votre navigateur, vous obtenez l’affichage de tous les articles contenus dans une même rubrique. Essayez avec id_rubrique=2 !

Notons que dans cet exemple, nous avons volontairement mentionné BOUCLE_mesarticles afin de montrer que le nom associé à la boucle est purement arbitraire, le tout étant d’utiliser le même nom lorsque l’on ferme la balise  !

Exemple 4 :


<HTML>

<!-- Début de l'affichage des rubriques -->
<BOUCLE_mesrubriques(RUBRIQUES)>
   <B>#TITRE<B><BR>

   <!-- Début de l'affichage des articles de la rubrique courante -->
   <BOUCLE_mesarticles(ARTICLES){id_rubrique}>
        - #TITRE<BR>
   </BOUCLE_mesarticle>
   <!-- Fin de l'affichage des articles de la rubrique courante -->

</BOUCLE_mesrubriques)
<!-- Fin de l'affichage des rubriques -->

</HTML>

Cet exemple permet d’afficher le titre de toutes les rubriques ainsi que le titre de chaque article contenu dans chaque rubrique.

Explications :

  • La première boucle ne s’effectue non plus sur les articles mais sur les rubriques : ceci du fait que nous utilisons (RUBRIQUES) et non pas (ARTICLES) ;
  • Aucune condition n’est effectuée sur les rubriques (nous n’avons pas les symboles { et } précisant une condition quelconque). Le résultat est donc identique quel que soit le paramètre passé dans l’URL (id_rubrique=1 donne donc le même résulat que id_rubrique=2) ;
  • La seconde boucle s’applique pour chaque rubrique sélectionnée par la première boucle, autrement dit nous utilisons une boucle dans une boucle. C’est la condition {id_rubrique} qui permet de spécifiquer que l’on traite la rubrique courante, c’est à dire la rubrique sélectionnée par la première boucle (essayez donc de supprimer cette condition pour voir le résultat que cela donne !) ;
  • Nous avons ajouté des commentaires (entre les balises HTML <!-- et -->). Vous verrez que lorsque vous ferons des squelettes contenant beaucoup de code HTML, si on ne met pas de commentaires, on a rapidement du mal à distinguer le code SPIP du code HTML !

Avec ces 4 exemples, vous connaissez maintenant les principes de base de l’utilisation des balises et des boucles SPIP ! Il ne nous manque plus qu’à étudier dans le détail quelques points pour vous permettre de créer de jolis sites faciles à maintenir...



6.3.3. Les différentes balises autorisées dans les boucles RUBRIQUES, ARTICLES et BREVES



6.3.4. Les différentes conditions (critères de sélection) autorisées dans les boucles



6.3.5. Syntaxe complète des balises SPIP