Doc d’intro synthétique (4 pages) à Spip et sa programmation

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Voici un doc qui m’aurait probablement rendu service, quand j’ai commencé à utiliser SPIP. La doc sur SPIP est très bien faite, félicitations, mais il m’a fallu lire pas mal de pages pour comprendre certaines choses.

Ne serait-ce que parce que je ne suis vraiment pas habitué à programmer en PHP, ni à SQL. Je connais bien le Basic, le Fortran (y compris pour les fonctionnalités évoluées) et moins bien d’autres langages, y compris orientés objet) mais les boucles Spip m’ont déconcerté. J’ai donc voulu compléter les explications de la doc actuelle par quelques lignes, écrites autrement.

J’espère que ce sera compréhensible par d’autres personnes, et en particulier par les novices (!) ;-)

Cette doc est donc très complémentaire à la doc actuelle, et il serait probablement utile d’y insérer des liens vers les articles de la doc SPIP.

J’espère qu’il n’y a pas d’erreur, grossière ou petite, même si ce doc est volontairement très général.

J’aimerais bien avoir vos réactions,

Marc

Présentation synthétique de SPIP

SPIP en quelques lignes

SPIP est un système conçu pour publier des articles sur Internet, et ce sur un mode collaboratif :
-  les rédacteurs proposent des articles dont ils sont, ou non, les auteurs
-  ces articles font l’objet d’une procédure d’acceptation, avant d’être publiés : ils sont soumis aux administrateurs, qui publient l’article. Un forum privé attaché à l’article permet de discuter des améliorations à apporter à l’article avant sa publication.
-  les administrateurs peuvent modifier ces articles, même une fois publiés (en ligne).

Un site Spip présente souvent en priorité les derniers articles publiés (sur la page d’accueil) : c’est un magazine sur le Web, un ’webzine’.

SPIP permet donc de créer un site Web « dynamique ». Contrairement à un site statique, dont les éléments (pages du site) sont placés ’à la main’ sur le site, par son administrateur. SPIP est en quelque sorte un « système d’exploitation » du site, gérant les éléments que les rédacteurs y placent, en leur donnant un n°.

Chaque page est repérée par ce numéro : http://www.monsite.extention/article.php3?id_article=XXX, par opposition à un site statique (http://www.monsite.extention/mes_vacances .html), où c’est l’administrateur qui donne le nom à la page Web (mes_vacances .html).

Spip est conçu pour offrir une grande interactivité du site : par exemple, chaque article peut faire l’objet d’un Forum spécifique, de même que chaque rubrique. Les visiteurs du site peuvent donc réagir en donnant leur avis sur l’article, la rubrique, et sur les commentaires faits par les visiteurs précédents.

Chaque article est classé dans une rubrique. Une rubrique peut contenir des sous-rubriques. Si elle est au niveau le plus haut c’est un « secteur » du site Web, il est placé à la racine.
Le visiteur peut donc naviguer à l’intérieur du site grâce à ces rubriques / sous-rubriques, ou grâce au « plan du site » qui montre la structure du site, l’arborescence de ces rubriques.

Les mots clés peuvent compléter cette navigation : associés à chaque article, ils permettent de retrouver les autres articles traitant des mêmes thèmes que l’article affiché.

Les « brèves » complètent les articles, mais elles ne peuvent être insérées que dans les rubriques à la racine (et non dans l’arborescence). Mais il vaut mieux les réserver à certaines fonctions précises, et nous ne parlerons ici que des articles. Il est d’ailleurs possible que les brèves ne fassent plus l’objet de développement (sur les prochaines versions de Spip).

Fonctionnement de SPIP en quelques lignes

Pour offrir ces fonctionnalités, SPIP s’appuie sur une base de données relationnelle (MySQL) et sur un langage également très répandu sur Internet : PHP (version4). Spip est en quelque sorte une couche supplémentaire, et la programmation se fait en utilisant un langage spécifique, assez simple, qui dispense le plus souvent d’utiliser PHP ou le langage des requête SQL. Il vaut mieux connaître les principes de base du langage HTML, mais Spip dispense en général d’écrire en HTML.

Un des avantages de Spip est son utilisation d’une mémoire tampon, le ’cache’, sur le serveur, qui stocke toutes les informations nécessaires au site pour être utilisé par les visiteurs : ce /cache est en quelque sorte une image de la base de données, opérationnelle et donnant des temps d’accès très corrects. Et si la base de données est « tombée » le site Spip continue de fonctionner.

Évidemment, cela veut dire que les modifications de la base de données ne sont pas immédiatement et automatiquement prises en compte sur le site : le rédacteur ou l’administrateur doit ’recalculer’ la page (spécifique), ou ’vider le cache’ (ce qui assure la réactualisation du site entier).

Cette façon de faire permet de gagner sur tous les tableaux : bénéficier de la souplesse d’un langage interprété (et non compilé), et de l’efficacité d’une ’compilation’ en quelque sorte (l’utilisation du cache).

Pour programmer avec Spip

Programmer sur Spip revient à écrire des « squelettes » (yyyy.html). Ces fichiers sont appelés squelettes car il donnent la structure des pages Web qui seront construites sur cette trame. En anglais, le terme template (modèle) est utilisé.

Ces squelettes sont associés à des fichiers php (yyyy.php3) : quand ils sont fournis à PHP, PHP fait appel à ces fichiers squelettes, puis interroge la base de données selon les indications fournit dans yyyy.html et construit la page Web au format spécifié dans yyyy.html.

Par exemple : article.html est un des squelettes essentiels de Spip : il spécifie les articles qui doivent être affichés, à chaque instant, en fonction du contexte.

Et le fichier php article.php3 précise certains éléments, comme la fréquence de rafraîchissement des pages, dans le "cache’. Ce fichier article.php3 se limite très souvent aux lignes suivantes :

<?php
$fond = "article";
$delais = 2 * 3600;
include ("inc-public.php3"); ?>

Lors d’une modification du site, PHP va donc utiliser ces fichiers yyyy.php3 pour interpréter ces squelettes, pour interroger / modifier / compléter la base de données (MySQL) et pour construire / modifier l’image mémoire qui sera plus tard chargée sur le serveur (en rafraîchissant le cache).

Et lorsque le visiteur clique sur le lien « mes_vacances_2003 » (stocké dans la base sous la référence ‘article 82’), l’adresse url affichée sera : http://www.monsite.extension/article.php3?id_article=82.

Cet exemple montre bien :
l’utilisation par PHP du fichier article.php3
l’interrogation de la base de données pour trouver le n° de la page « mes_vacances_2003 »
la réponse trouvée dans la base de données (id_article=82)
la construction d’une page dynamique (puisque liée au clic sur le lien « mes_vacances_2003 »).

Sauf que la page correspondante est tirée du fichier /cache. En général elle a été calculée auparavant, lors du rafraîchissement régulier, ou lorsque ce rafraîchissement est déclenché par l’administrateur, suite à une modification sur la base de données.

Pour être affichée sur Internet, le résultat est en général au format .html, selon la disposition indiquée dans article.html. Des feuilles de style CSS peuvent être utilisés, ainsi que du Javascript, du Flash par exemple.

Mais du XML peut aussi être créé. (par exemple backend.php3/html génère un fil de syndication au format RSS 0.91, à destination des sites qui pourront utiliser ces informations (mots clés utilisés, dates de dernière modification, etc.) pour donner accès aux derniers articles publiés (par ex.), sur un thème donné.

Remarque : les squelettes yyyy.html sont lus par un fichier (yyyy.php3) écrit en PHP. Ils peuvent donc aussi inclure des instructions en PHP, des requêtes SQL spécifiques, qui seront exécutées lors de la visite. Ce qui offre une grande souplesse (ajouter un compteur par exemple). Il y a cependant certaines limites à l’emploi de PHP dans les squelettes.

Spip, logiciel libre, évolue assez vite

Une autre particularité de SPIP est qu’il a été développé comme "logiciel libre" (licence GPL) : les utilisateurs de Spip contribuent à son développement, en proposant des ajouts ou modifications. Si ces améliorations sont acceptées, elles seront incorporées à la version suivante de Spip, et bénéficieront ainsi aux autres utilisateurs, s’ils le souhaitent.

Au moment du chargement, Spip propose des fichiers standard (par exemple article.html, et sommaire.html), que chaque administrateur de site va adapter à ses besoins.

Pour faciliter l’évolution du site, au fur et à mesure des développements de Spip ; nous en sommes à la 1.7.2 (et 1.8 béta), ces fichiers sont en faits livrés sous les noms de article-dist.html et sommaire-dist.html.

Par défaut (si les fichiers article.html et sommaire.html ne sont pas présents sur le serveur, c’est-à-dire s’ils n’ont pas encore fait l’objet d’adaptation par l’administrateur), ce sont les fichiers article-dist.html et sommaire-dist.html qui sont utilisés par Spip.

Lors de l’installation de la version ultérieure de Spip (la 1.8) les fichiers article-dist.html et sommaire-dist.html seront remplacés par ceux de la version 1.8, sans écraser ainsi les adaptations faites par l’administrateur (sur les fichiers article.html et sommaire.html).

Remarque : la version 1.8 (ou la version 2.0) apportera des évolutions majeures : nouveau compilateur, facilités supplémentaires pour écrire des squelettes, accès facilité à plusieurs bases de données

Pour adapter les squelettes fournis en standard

Les squelettes standard permettent de se faire la main, et de comprendre le fonctionnement général de Spip, dès que 2 ou 3 articles sont créés, sous 2 rubriques différentes, avec 2 mots clés.

La première étape consiste à créer un squelette sommaire.html qui servira de page d’accueil sur le site.

Quand le visiteur d’un site Spip écrit : http://www.monsite.extention, l’affichage devient : www.monsite.extention/.
Ce qui remplace le classique,http://www.monsite.extention/index.html d’un site statique, où index.html est la page d’accueil.

Vous pouvez le constater sur http://www.spip.net/ et http://www.spip.net/fr

A titre d’illustration, la page standard sommaire-dist.html commence ainsi :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="#LANG">
<head>
<title>[#NOM_SITE_SPIP] </title>
<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">

La structure est bien celle d’une page HTML.

A l’exécution, la balise SPIP #NOM_SITE_SPIP sera remplacée par le nom du site, lu dans la base SQL.
Les balises HTML <title> et </title> spécifient quant à elles que ce qu’elles encadrent est le titre de la page html créée : cette page est, à juste titre, le sommaire du site.

La boucle SPIP, notion de base pour programmer avec SPIP

La notion de base de SPIP est la boucle, qui permet d’interroger la base de données et de trouver zéro, une ou plusieurs réponses. Selon le cas, le traitement sera différent.

Prenons l’exemple du squelette article.html, qui affiche les articles appartenant à la même rubrique.
En voici le code simplifié :

<B_articles_rubrique>
	code exécuté une (seule) fois, s'il y a au moins une réponse, (et avant  affichage du code de la boucle)
	<BOUCLE_articles_rubrique(ARTICLES) {id_rubrique} {par hasard} {exclus} >
		code de la boucle, exécuté autant de fois qu'il y a de réponses : 
affichage du titre de chaque article, cliquable (avec lien vers l'article)
		<a href="#URL_ARTICLE"[title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a>
		</li>
	</BOUCLE_articles_rubrique>
	code exécuté une (seule) fois, s'il y a au moins une réponse, (après affichage du code de la boucle)
</B_articles_rubrique>

L’élément fondamental de cette instruction est : ARTICLES, entre parenthèses, qui spécifie qu’on cherche dans la base des articles (et non des rubriques, des brèves, etc.)
{id_rubrique} désigne qu’on s’intéresse seulement aux articles de la rubrique ayant l’identificateur {id_rubrique}, c’est à dire la rubrique courante, celle dans laquelle est rangé l’article affiché.
{par hasard} précise que les articles seront présentés en ordre aléatoire (ni alphabétique, ni numérique, etc.)
{exclus} précise qu’on exclue de la liste (des articles trouvés dans la base), l’article affiché (l’article courant), puisque indiquer un lien vers celui-ci n’a pas grand sens.

Programmer avec SPIP consiste la plupart du temps à écrire des boucles, successives ou imbriquées, qui permettent de trouver dans la base les éléments nécessaires à la construction de la page qui sera affichée.

Le terme « boucle » est lié au traitement répétitif, au sein de la boucle, pour chaque élément trouvé dans la base. La différence par rapport aux boucles de Basic ou Fortran tient au fait qu’on ne sait pas a priori combien de fois la boucle va être exécutée : cela dépend du nombre de réponses trouvées dans la base.
La présence de code ‘avant’, ‘après’, et de code ‘alternatif’ permet une écriture condensée et homogène.

Exemple de 2 boucles imbriquées : le squelette sommaire.html affiche (page d’accueil) le titre des articles les plus récents, dans l’ordre anti-chronologique ({inverse}), suivi de la date, et de son ou ses auteurs :

<!-- Articles recents -->
<BOUCLE_articles_recents(ARTICLES) {par date} {inverse} >
	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
	<div class="detail">
	[(#DATE|nom_jour)] [(#DATE|affdate)]
<B_auteurs_recents><:par_auteur:> 
<BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>
#NOM
</BOUCLE_auteurs_recents>
	</div><br>
</BOUCLE_articles_recents>

Des tests (du genre if else, selon la syntaxe du PHP) peuvent être insérés, pour compléter ces boucles.

Discussion

3 discussions

  • 1

    Bonjour,

    Merci pour ces explications supplémentaires et nécessaires.
    Serait-il possible d’y ajouter un plan de site en exemple avec les feuilles de style utilisées. Je ne comprends pas comment on fait pour avoir une présentation différents selon les pages (photos et articles texxtes) pour que la présentation change automatiquement.
    Merci d’avance,
    jack

    • Pour une présentation différente selon les pages, il suffit à ma connaissance

      -  d’avoir des squelettes différents article.html pour les différentes pages, ce qui peut être obtenu via les rubriques (et article-1.html ou article=1.html je ne sais plus) : chaque rubrique pourrait afficher les pages de manière différente (chaque squelette faisant appel à une feuille de style différente)

      -  ou bien de faire appel à des mots-clés pour sélectionner la feuille de style à appliquer (il doit y avoir des contribs sur ce thème)

      (si besoin est, poster un message sur spip@rezo.net)
      Souhaitant que cela aide

    Répondre à ce message

  • 2

    Vous dites :

    Prenons l’exemple du squelette article.html, qui affiche les articles appartenant à la même rubrique. En voici le code simplifié :

    N’y a-t-il pas une confusion entre « article.html/php3 » et « rubrique.html/php3 ».

    Sauf erreur la page article affiche le contenu d’un article et c’est la page rubrique qui, elle, affiche la liste des articles d’une rubrique

    • Non, mais mon texte est à préciser.

      Le squelette article.html (article-dist.html) contient cette partie de code qui affiche (en marge) les articles de la même rubrique.

      Le texte initial :
      « Prenons l’exemple du squelette article.html, qui affiche les articles appartenant à la même rubrique. En voici le code simplifié. »

      pourrait être corrigé ainsi :
      « Prenons l’exemple du squelette article.html livré (article-dist.html), qui affiche (en marge) les articles appartenant à la même rubrique. »

      Je n’ai pas réussi à modifier le document ; ni d’ailleurs à corriger la faute d’orthographe extention, à corriger par « extension ».

    • JulesBourvil

      En effet, comme cela c’est plus compréhensible.

      Néanmoins je pense qu’il vaudrait mieux prendre la page rubrique.html comme exemple, car les choses étant claires (article = affichage du contenu ; rubrique = liste d’articles) cela porte moins à confusion pour celui qui découvre SPIP.

      Merci en tout cas, pour cette synthèse que je compte bien transmettre à certains correspondants

    Répondre à ce message

  • autre cours dispo sur les squelettes (en bas de l’article)

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom