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 :
- L’appel de note était bien inséré, mais pas la note au sein de
#NOTES
; - 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 :
- Installer le plugin.
- 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]]
). - Déclarer le pipeline
modeles_avec_notes
soit dans un fichiermes_options.php
, soit dans le fichierpaquet.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 - 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 liste_articles_auteurs
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.
No discussion
Add a comment
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Follow the comments: |