Créer des modèles générant des notes de bas de page

Ce plugin permet de créer des modèles capables de générer des notes de bas de page affichables comme telles.

Il en fournit un à titre de démonstration.

Rappel sur ce qu’est un modèle SPIP

Un modèle est un petit squelette SPIP qui décrit un fragment de HTML facile à insérer dans un autre squelette ou — et c’est là le principale intérêt — dans le texte d’un article.

Le problème

Pour une structure associative, nous avions besoin d’un modèle capable de :

  • récuperer des informations sur des activités (objet à part, spécifique à notre association) ;
  • présenter ces activités, en mettant, pour certaines informations, un renvoi en note de bas de page.

Nous avions commencé par créer un modèle qui générait quelque chose comme :

Mon texte[[Une note de bas de page.]]

Le problème était que les modèles étant interprétés après les raccourcis typographiques de SPIP, nous n’avions pas de note de bas de page.

Nous pouvions éventuellement appliquer le filtre |propre au sein du modèle, afin d’interpréter les raccourcis SPIP. Cependant cela ne marchait pas correctement pour deux raisons :

  1. L’appel de note était bien inséré, mais pas la note au sein de #NOTES;
  2. la numérotation de l’appel de note était incorrect, car ne tenait pas compte des notes présentes avant le modèle ; de même les notes suivant le modèle étaient mal numérotées.

La solution

Nous avons écrit ce plugin permettant à certains modèles, définis au cas par cas, d’être interprétés avant la transformation des raccourcis typographiques SPIP. Cependant, le besoin étant essentiellement pour les notes de bas de page [1], nous l’avons appelé “modèles avec notes”.

Les personnes souhaitant créer de tels modèles doivent :

  1. Installer le plugin.
  2. Créer leur modèle dans modeles. Ce modèle peut renvoyer un texte formaté selon les raccourcis typographiques de SPIP, et notamment avec des notes de bas de page ([[Texte de ma note]]).
  3. Déclarer le pipeline modeles_avec_notes soit dans un fichier mes_options.php, soit dans le fichier paquet.xml de plugin (notamment si l’on distribue les squelettes sous forme de plugin). Voir le site “Programmer avec SPIP” sur la manière de déclarer un pipeline
  4. Ajouter leur(s) modèle(s) au tableau du flux de ce pipeline.

Exemple

Le plugin fournit lui même un exemple.

Le modèle

Le modèle modele_avec_notes renvoie la liste des articles, avec pour chacun d’entre eux les auteurs et autrices en notes de bas de page. Il est défini ainsi dans modeles/liste_articles_auteurs.html :

<BOUCLE_articles(ARTICLES) {par titre}>
-* #TITRE[[#LESAUTEURS]]
</BOUCLE_articles>

On le voit, le code qui sera généré utilisera la syntaxe des raccourcis SPIP.

La déclaration du modèle

Et maintenant, nous déclarons le modèle au plugin modeles_avec_notes, via le pipeline homonyme.

Dans le fichier paquet.xml nous déclarons le pipeline :

<pipeline nom="modeles_avec_notes" inclure="modeles_avec_notes_pipelines.php" />

et le code correspondant dans le fichier modeles_avec_notes_pipelines.php, qui se contente d’ajouter le nom du modèle dans le flux du pipeline :

/**
 * Retourne la liste des modèles à traiter de manière anticipée
 * Pour y gérer les notes
 * @param array $flux liste de modeles
 * @return $array $flux
 **/
function modeles_avec_notes_modeles_avec_notes($flux = array()) {
	$flux[] = 'liste_articles_auteurs';
	return $flux;
}

Dans le nom de la fonction :

  • le premier modeles_avec_notes correspond au préfixe du plugin; il vous faudra l’adapter dans votre plugin;
  • le second modeles_avec_notes correspond au nom du pipeline; il ne devra pas changer dans votre plugin.

Il ne nous reste plus qu’à l’appeler dans un article, via la syntaxe habituelle : <liste_articles_auteurs|>.

Limites

Pour ce type de modèle, on prêtera attention aux limites suivantes :

  • tout ce qui est susceptible d’être compris comme des raccourcis typographiques SPIP sera interprété en tant que tel;
  • contrairement aux modèles classiques (depuis la version 3.0 de SPIP), les paramètres d’environnement ne sont pas automatiquement passés [2]. Par conséquent, il faut passer explicitement chaque paramètre lors de l’appel au modèle [3].
  • De même, pour les sites multibases, le paramètre $connect n’est pas passé à l’appel du modèle.

Footnotes

[1En effet, pour qu’un modèle puisse interpréter les autres raccourcis typographiques, il suffit simplement de terminer son squelette avec #FILTRE{propre}.

[2Ceci est dû à une limitation technique difficilement contournable en l’état du code de SPIP.

[3Ceci empêche par exemple d’utiliser une pagination dans ces modèles, ce qui est plutôt sain.

Discussion

No discussion

Add a comment

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 / PostgreSQL
  • 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 apparait.

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.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom