Carnet Wiki

Les incontournables de SPIP

Version 4 — Mars 2007 NicolasR

Des commentaires :



Les incontournables de SPIP

I- Présentation

SPIP est un système de publication sur internet, distribué en licence GPL et disponible à l’adresse suivante : http://www.spip.net/spip-dev/DISTRIB/

SPIP permet à des non-développeurs de mettre en place un site dynamique composé de rubriques, de sous rubriques (et d’autant de niveaux que souhaités), d’articles, de documents (images, ZIPs, PDF, ...), de brèves mais aussi d’outils communautaires tels des forums, une gestion des pétitions ou encore un moteur de recherche.
L’orientation initiale de SPIP permet la conception de sites à tendance éditoriale. Des adaptations sont possibles (et c’est même la principale activité de la communauté de SPIP) mais il faut d’abord valider la cohérence entre votre projet et les fonctionnalités de SPIP avant de décider de son usage. Par exemple, SPIP n’est pas vraiment approprié dans le cadre d’un site de commerce électronique puisqu’il ne sait en aucun cas gérer un caddie.

[Erreur...4][Erreur...5]SPIP est développé en PHP PHP3 avec une base de données MySQL Mysql . Il est donc nécessaire que votre [solution d’hébergement->/ListeDesHebergeurs] d’hébergement->http://www . spip-contrib.net/spikini/index.php ?wiki=ListeDesHebergeurs] accepte ces technologies.

II – Les Principales caractéristiques de SPIP :

- Spip permet de gérer le contenu éditorial d’un site comme modifier un texte, rajouter un article ou même une rubrique… sans aucune connaissance particulière des technologies liées à la conception d’un site internet. Il offre donc une accessibilité à la publication web dynamique aux non-techniciens.
-  Spip permet à plusieurs auteurs de travailler ensemble à un article. Il s’agit donc d’une plateforme de travail collaboratif. L’obligation de passer par un administrateur afin de publier réellement un article permet un contrôle appréciable dans le cadre d’une structure de co-écriture. Et s’il est nécessaire ou souhaitable de mettre au point un document à plusieurs, « Spikini » complète facilement Spip, permettant de créer des pages Wiki, modifiables par tous.
-  Spip n’est pas figé. De nombreuses fonctionnalités peuvent être implantées, soit par un développeur ‘maison’, utilisant la flexibilité offerte par les fichiers mes_options.php3 et mes_fontions.php3, soit par l’implémentation d’une fonctionnalité déjà codée et testée, telles que celles disponibles sur le site http://www.spip-contrib.net .
-  La communauté de SPIP est en effet très importante, active, conviviale et efficace. Il ne faut pas oublier que SPIP est distribué sous licence GPL et il est essentiel d’en respecter l’esprit. Ainsi, vous pourrez trouver de nombreuses aides aussi bien sur la mailing-list SPIP (spip@rezo.net) que sur spip-contrib mais n’oubliez pas vous aussi de mettre à disposition de la communauté vos propres adaptations (nouvelles fonctions, squelettes,...) ou tout simplement de répondre aux questions des plus débutants.
Pour vous inscrire à la mailing-list, rendez-vous sur : http://listes.rezo.net/mailman/listinfo/spip
ATTENTION : cette mailing-list est très active, comptabilisant une moyenne de 60 messages/jour. Elle est aussi très enrichissante, bien entendu.
Un autre haut lieu de rencontres des utilisateurs de SPIP semble être physique, les apéros SPIP ainsi que les rencontres du café numérique.

[Erreur...8]

III – Installation

Pour installer SPIP, prévoyez un serveur vous permettant la création d’une base de données (ou l’ajout de tables à une base existante) ainsi que l’interprétation de fichiers .PHP3.
Téléchargez à l’adresse indiquée ci-dessus la dernière distribution (1.7.2 en juillet 2004), décompressez les fichiers à la racine de votre site. Entre autres, les dossiers ‘cache’ et ‘ecrire’ doivent se trouver à la racine de votre site.
SPIP est alors installé ! Il vous suffit maintenant de le configurer. Rendez-vous à l’adresse www.votresite.com/ecrire/ et suivez les instructions.
Attention, vous devez connaître les codes d’accès à votre base de données.
La personne qui installe SPIP est automatiquement enregistrée comme administrateur. (Voir les différents statuts ci-dessous.)

[Erreur...10]

IV - Principes de fonctionnement

L’espace de rédaction de Spip (www.monsite.com/ecrire/) permet à un néophyte complet, sachant toutefois manier souris, clavier et doué d’un minimum d’instinct informatique, de saisir l’arborescence de son site puis de le garnir d’informations, sous la forme d’articles, de brèves, …

[Erreur...12]Spip est installé avec un jeu de squelettes par défaut. Pour modifier la manière dont s’affiche l’information, vous aurez besoin d’un webmaster maîtrisant le html mais aussi le concept de boucles Spip (ou bien capable d’installer un des squelettes disponibles sur le net).

Qu’est qu’une boucle Spip ?

Une boucle est une instruction qui indiquera au moteur de SPIP quelles informations afficher à l’écran. C’est une reformulation des commandes SQL qui permettent d’interroger la base. Le webmaster devra donc apprendre ce concept et sa syntaxe (fort heureusement très simple).

Par exemple, si je souhaite afficher toutes les rubriques de mon site, je dois écrire :

<ul>
 <BOUCLE_toutes_les_rubriques (RUBRIQUES) {tout}>
 <li>#TITRE</li>
 </BOUCLE_toutes_les_rubriques>
 </ul>

Où :
-  _toutes_les_rubriques est un nom arbitraire que le webmaster choisit, en sachant qu’il ne peut pas y avoir deux boucles portant le même nom dans une page. Puisqu’il est possible de donner aux boucles des noms très long, il est bon que celui-ci indique le résultat de la boucle.
-  la casse est très importante et doit être respectée.
-  Il n’est pas possible d’utiliser des caractères spéciaux (accents) dans le nom de la boucle.
-  <BOUCLE…> est un tag ouvrant : il indique le début de la boucle.
-  </BOUCLE…> est un tag fermant : il indique la fin de la boucle.
-  Tout ce qui se trouve entre ces deux tags sera exécuté un nombre de fois égal au nombre de réponses : ici, le nombre de rubriques présentes dans le site (quel que soit leur niveau : rubrique principale, sous-rubriques…)
-  {tout} est un critère de recherche indiquant à SPIP quelles rubriques vous souhaitez récupérer. Par exemple, si vous remplacez {tout} par {racine}, vous n’afficherez plus que les rubriques principales (et non les sous-rubriques).
-  #TITRE est une balise, affichant le titre de la rubrique.

Il existe un certain nombre de types de boucles (rubriques, articles, auteurs, forum…) et chacune possède des critères de recherche et des balises particulières, même si certaines sont communes à plusieurs types de boucles.

[Erreur...16][Erreur...17][Erreur...18]Dans quel fichier installer mes boucles ?

Dans un squelette.

Alors qu’est-ce qu’un squelette ?

En fait, les pages visibles de votre site (comme la page d’accueil par exemple) sont des couples de fichiers : un fichier ‘.php3’ qui appelle un fichier ‘.html ‘.
Par exemple, la page ‘sommaire.php3’ appelle le fichier ‘sommaire.html‘. C’est ce fichier qui est nommé ‘squelette’.
Un squelette est tout simplement un fichier.html qui contient le code habituel d’une page internet (méta-tags, appel d’une css, (x)html, …) ainsi que des boucles là où vous souhaitez afficher des informations issues de l’interface de rédaction de SPIP (www.votresite.com/ecrire).

Vous trouverez des squelettes par défaut dans votre distribution SPIP, ce sont les fichiers « nomdufichier-dist.html ». Par exemple : « rubrique-dist.html » est le squelette par défaut appelé par la page « rubrique.php3 » si aucun squelette « rubrique.html » n’a été créé.
Vous trouverez dans ces squelettes par défaut des exemples de boucles qui peuvent vous être très utiles. Nous vous invitons donc à les étudier. Veillez cependant à ne pas les modifier ni à les effacer, ce sont ces fichiers qui sont appelés par défaut par SPIP si votre squelette ’disparaît’.

[Erreur...22][Erreur...23]Pour résumer, comment créer ma première page ?

1 - Créez un fichier sommaire.html
2 - Codez-y votre page à votre habitude : html, css…
3 - Écrivez vos boucles aux différents emplacements où vous souhaitez afficher du texte dynamique ou des documents…
4 - Garnissez le contenu éditorial de votre site par l’interface de rédaction de SPIP.
5 - Rendez-vous sur www.votresite.com et admirez le résultat.

[Erreur...25]Un exemple ?

Rendez-vous à l’adresse suivante :
http://www.digitaldeclic.com/wanted et observez cette page… C’est du SPIP.

Comment en étudier le squelette ? En vous rendant à cette adresse :
http://www.digitaldeclic.com/wanted... et en affichant la source, tout simplement.

La première ligne est utilisée dans le cadre d’une contribution permettant de restreindre l’accès à certaines rubriques. Supprimez la donc si vous souhaitez recopier cette page afin de la décortiquer.

De nombreux squelettes sont disponibles sur le site SPIP-Contrib, n’hésitez pas à vous en inspirer. De même, des boucles sont présentées dans la caverne aux boucles.

V- Pour aller plus loin avec les boucles …

La syntaxe de boucles présentée ci-dessus est la plus simple possible. La boucle <BOUCLE_sous_rubrique> est un exemple complet des subtilités dans l’utilisation des boucles.

<B_sous_rubriques>
 	[<img src="img_exp/sheriff.gif" width="18" height="32" alt="">]
 	<BOUCLE_sous_rubriques(RUBRIQUES) {id_parent} {par titre} {" | "}>
 		<a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
 	</BOUCLE_sous_rubriques>
 </B_sous_rubriques>
 	<BOUCLE_racine_exclue(RUBRIQUES){titre_mot=racine}{doublons}>
 	</BOUCLE_racine_exclue>
 	<B_rubriques_soeurs>
 		[<img src="img_exp/sheriff.gif" width="18" height="32" alt="">]
 		<BOUCLE_rubriques_soeurs(RUBRIQUES){meme_parent}{par titre} { | }{doublons}>
 			<a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
 		</BOUCLE_rubriques_soeurs>
 	</B_rubriques_soeurs>
 <//B_sous_rubriques>

Décortiquons-la ensemble :

<B_sous_rubriques>
 <img src="img_exp/sheriff.gif" width="18" height="32" alt="">
 <BOUCLE_sous_rubriques(RUBRIQUES) {id_parent} {par titre} { | }>


COMMENTAIRES :

- Toute boucle peut commencer par une balise .
-  Toutes les lignes de code comprises entre cette balise et la balise
<BOUCLE_ lenomdelaboucle> s’exécuteront uniquement si la boucle renvoie au minimum un résultat.
-Dans notre exemple, l’image sheriff.gif s’affichera uniquement s’il existe une sous-rubrique rattachée à la rubrique en cours de visualisation.

[Erreur...34]- Les critères de recherche utilisés :
o {id_parent} permet de récupérer la liste des rubriques contenues dans la rubrique courante (c’est-à-dire les sous-rubriques de la rubrique actuelle)
o {par titre} permet de classer les résultats par ordre alphabétique. Ce classement se fait sur le champ ‘titre’ des rubriques.
o {" | "} permet de séparer les résultats par une espace insécable.

_ <a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
_ </BOUCLE_sous_rubriques>
_ </B_sous_rubriques>


COMMENTAIRES :
-   #URL_RUBRIQUE est une balise générant automatiquement un lien vers la page rubrique.php3 et transmettant le numéro de la rubrique concernée.
-   #TITRE permet d’afficher le titre de la rubrique
-   [(#TITRE|supprimer_numero)] affiche donc le titre de la rubrique en appliquant une fonction supprimer_numero(), appelée ‘filtre’ dans le jargon SPIP. Ce filtre permet de supprimer les numéros que l’on a pu insérer dans le titre des rubriques.
Pour en savoir plus sur les filtres, aller voir à cette adresse : http://www.spip.net/fr_article901.html
-   </BOUCLE_sous_rubriques> est le tag fermant la boucle en elle-même
-   </B_sous_rubriques> ferme l’espace réservé à un texte optionnel qui pourrait s’afficher après les résultats de la boucle. Imaginons par exemple que vous ayez afficher vos résultats dans une liste. Vous auriez alors besoin de fermer votre balise <ul>.
Le tag fermant </ul> serait situé entre </BOUCLE_sous_rubriques> et </B_sous_rubriques>

Nous avons donc vu que si <BOUCLE_sous_rubriques…> renvoie au moins un résultat une image de sherif apparaît puis les titres des sous-rubriques s’affichent sous la forme de liens, chacun permettant d’afficher la sous-rubrique concernée.
Mais que se passe-t-il si aucune sous-rubrique n’est présente ? Ben, rien ne s’affiche me diriez-vous… Et c’est vrai.
Pourtant j’ai souhaité dans ce squelette afficher les rubriques de même niveau s’il n’existe pas de sous-rubrique. (pour plus de clarté, je vous invite à visiter la rubrique ‘le collectif Wanted’).

[Erreur...36][Erreur...37]En fait, tout ce qui se trouve entre </B_sous_rubriques> et <//B_sous_rubriques> s’affiche si et seulement si la boucle <BOUCLE_sous_rubrique…> ne renvoie aucun résultat.

<BOUCLE_racine_exclue(RUBRIQUES){titre_mot=racine}{doublons}>
_ </BOUCLE_racine_exclue>


COMMENTAIRES :

[Erreur...39]- Cette boucle permet grâce au critère doublons d’exclure de l’affichage des boucles RUBRIQUES suivantes (n’importe où dans le squelette !) les rubriques dont un des mots-clés est « racine ».

<B_rubriques_soeurs>
_ <img src="img_exp/sheriff.gif" width="18" height="32" alt="">
_ <BOUCLE_rubriques_soeurs(RUBRIQUES){meme_parent}{par titre} { | }{doublons}>
_ <a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a>
_ </BOUCLE_rubriques_soeurs>
_ </B_rubriques_soeurs>

[Erreur...41] COMMENTAIRES :
-   La boucle <BOUCLE_rubriques_soeurs…> fonctionne de la même manière que la boucle <BOUCLE_sous_rubriques…> mis à part le critère {meme_parent} utilisé au lieu de {id_parent}.
-   Le critère {meme_parent} permet de sélectionner les rubriques dépendant de la même rubrique que la rubrique en cours

<//B_sous_rubriques>

Pour conclure, cette structure pourrait se traduire par :
« S’il y a des sous-rubriques, afficher comme lien leurs titres séparés d’un « | ».
Sinon, afficher les autres rubriques au même niveau d’arborescence sauf s’il s’agit des rubriques à la racine du site. »
_

VI- Pour aller plus loin avec les squelettes (Première partie) : personnaliser un squelette en fonction d’un numéro précis de rubriques, d’articles ou autres …

[Erreur...43][Erreur...44] Il arrivera certainement un moment où vous aurez besoin d’utiliser pour une rubrique donnée (ou un article, ou une fiche auteur…, mais notre exemple se basera sur les rubriques) un squelette spécifique. Par exemple, parce que cette rubrique présente les Foires aux Questions de votre site et ses sous-rubriques contiennent chacune une sous-rubrique particulière.
Posons que la rubrique en question est celle dont l’id est égal à 4. et les sous-rubriques concernées sont celles dont les id sont : 7, 8 et 9.

Le squelette nommé « rubrique=4.html » sera utilisé automatiquement lorsque la rubrique n°4 sera appelée (et pas ses sous-rubriques).
Le squelette nommé « rubrique-4.html » sera utilisé automatiquement lorsque la rubrique 4 ou ses sous-rubriques [dépendant de la rubrique n°4] seront appelés.
La forme rubrique=4 étant prioritaire sur rubrique-4, nous aurons bien un affichage particulier à la rubrique 4, et un autre particulier à ses sous-rubriques.

VII- Pour aller plus loin avec les squelettes (Seconde partie) : SPIP, PHP et Javascript…


Pour mieux comprendre les interactions entre PHP, Javascript et SPIP, je vous invite à lire la contribution « SPIP, PHP et Javascript sont sur un bateau » sur www.spip-contib.net. Mais en voici le principe en quelques lignes :

[Erreur...46][Erreur...47] - SPIP passe une première fois votre squelette dans la moulinette. Il considère alors TOUT ce qui n’est pas des boucles comme du texte !!! Donc <? Votre instruction php ?> est pour lui interprété comme un simple texte. SPIP crée alors une page qui est enregistrée dans le cache.
- L’internaute souhaite visualiser une page : il visualise la page du cache qui contient donc (en théorie) le résultat des boucles, du code html, du PHP et pourquoi pas du javascript... Le serveur interprète le code PHP puis renvoie une page ne contenant plus que des langages clients à votre navigateur...

Ceci n’est vraiment qu’un résumé de la contribution mais il montre qu’il n’est pas possible d’utiliser du PHP comme critère de recherche. Il existe sur spip-contrib des articles visant à contourner cette limitation, mais il faut aimer bricoler…

[Erreur...49]
_

VIII – Côté rédacteurs : Les différents statuts

Spip permet de gérer les statuts suivants :
-  administrateur
-  administrateur restreint
-  rédacteur
-  rédacteur extérieur
-  visiteur (seulement si au moins un article a le forum qui lui est attaché en accès sur abonnement)

Un administrateur a tous les droits :
o créer de nouveaux rédacteurs, modifier l’arborescence, les droits d’accès…
o Seul l’administrateur peut associer un nouvel auteur à un article
o Un administrateur peut changer les login et mots de passe des rédacteurs, administrateurs, administrateurs restreints et des visiteurs
o Il a les droits d’administrateur restreint

Un administrateur restreint doit être créé comme un administrateur puis peut être restreint à une ou plusieurs rubriques et sous-rubriques. Il peut :

_ o créer un rédacteur extérieur : existence d’une fiche auteur mais celle-ci n’a ni login ni mot de passe associés et ne peut donc pas entrer dans l’administration… Par contre, l’administrateur du site peut lui attribuer un login et un mot de passe
o écrire un article dans une rubrique qu’il n’administre pas et le proposer à validation
o poster un message sur un article dont il n’est pas auteur
o Modifier intégralement les rubriques, sous-rubriques, et articles ou autres dont il est responsable
o Modifier, ajouter, supprimer les mots-clés et les groupes de mots-clés
o Il ne peut pas modifier ou attribuer des login et mots de passe à des rédacteurs
o Il a les droits de rédacteur

[Erreur...52][Erreur...53][Erreur...54]Un rédacteur peut :
o rédiger un article dans n’importe quelle rubrique et le proposer à validation (il ne peut plus modifier un article qu’il a écrit mais qui a été validé !)
o visualiser la liste des auteurs
o visualiser les mots-clés

Un visiteur peut simplement accéder aux parties restreintes du site public ainsi qu’aux forums auquel il est abonné. Il n’a aucun accès à la partie privée (/ecrire) du site.

[Erreur...56]