Affecter automatiquement des articles à une brève ou vice-versa

Le titre correspond bien à ce que j’ai cherché à faire : il est facile de lier des articles ou des brèves à des mots-clés, mais je voulais aussi faire des sous-groupes d’articles pour l’un de mes (nombreux) groupes de mots-clés.
Comme je ne peux utiliser de mots-clés sur des mots-clés, j’ai décidé d’utiliser des… brèves. Tant qu’à faire, j’ai essayé d’automatiser la création automatique de liens vers les articles que je voulais grouper. Un peu de triche, en fait, fait que le cas de figure développé ci-dessous ne sera pas extensible à tout.

Une contrib qui ne sert pas à grand chose, donc indispensable pour un bon teasing.

Prenez un site généalogique où des articles contiennent un nom de personne dans le sur-titre — par exemple — avec la forme « Nom, Prénom ». Je prendrais, pour ma part, un site botanique où mes espèces végétales sont aussi dénoncées — en sous-titre, pour changer — par leur nom latin sous la forme « Genre espèce » (sans virgule).

Une brève liée à des articles

Ma viorne obier (ou viorne « boule de neige ») a droit à un article :

  • titre : viorne obier [nom français de l’espèce]
  • sous-titre : Viburnum opulus [nom international de l’espèce]
  • mot-clé du groupe « famille » : Caprifoliacées

Le groupe « famille » re-groupe donc plusieurs espèces (articles). Le problème c’est que les familles comprennent plusieurs genres ou si vous préférez, les espèces sont aussi regroupées en genre. La chance, c’est que le nom international des espèces — en latin — est stable, contrairement au nom vernaculaire (en français ici).

C’est donc cet ensemble « nom prénom1 prénom2 » ou plutôt « Genre espèce » qui va me servir de lien entre article, brève et mot-clé. Plus précisément, le « nom » donc le « genre ». Celui-ci est toujours le premier terme du champ « sous-titre ».

Je construis donc un squelette breve.html (ou breve-XX.html qui va dans mon secteur qui va bien) avec cette boucle :

[(#REM)  Articles dans la meme rubrique : donc plantes de meme genre ; espace apres balise, dans critere, pour eviter rosa<=rosanema (voir explication plus loin)
 ]
<BOUCLE_genre(ARTICLES) {id_rubrique=1} {soustitre==^#TITRE } {par soustitre} {"<br>"}>

<a href=#URL_ARTICLE title="(#SOUSTITRE|textebrut|entites_html)"]>
[(#TITRE)]
</a>
[ ((#SOUSTITRE))]

</BOUCLE_genre>

J’obtiens ainsi la liste des articles donc le sous-titre commence par le nom de ma brève. Ici, si je crée une brève Viburnum ; j’obtiens tous les articles dont le sous-titre commence par « Viburnum », en l’occurrence (et grâce à {soustitre==^#TITRE}) :

  • viorne bodnantense (Viburnum bodnantense)
  • viorne mancienne (Viburnum lantana)
  • viorne obier (Viburnum opulus)

Un petit plus : les brèves de même niveau

Puisqu’on a Famille —> Genre —> espèce, je peux aller plus loin en affichant la liste des autres genres de la même famille. Il s’agit d’imiter la hiérarchie des rubriques, des rubriques sœurs, etc.

Pour afficher mes Genres frères, une autre boucle :

<BOUCLE_MOT_FAMILLE(MOTS) {id_breve} {id_groupe=21}>
	<B_breves_rubrique>

	
		<h1><:meme_rubrique:></h1>
		<div>#_MOT_FAMILLE:TITRE&nbsp;: d'autres genres
		</div>
		
	<BOUCLE_breves_rubrique(BREVES) {id_rubrique} {exclus} {id_mot} {par titre}>
		
		<a href="#URL_BREVE">#TITRE</a>
		
	</BOUCLE_breves_rubrique>
		

	</B_breves_rubrique></BOUCLE_MOT_FAMILLE>

Tout les articles « végétaux » sont dans la même rubrique ; le mot-clé indiquant la famille est dans le groupe numéro 21. J’attribue aussi à ma brève, outre un nom de Genre à son champ titre, le mot-clé correspondant à sa famille (sa rubrique mère si l’on veut). Ce mot-clé est utilisé aussi par les articles. Donc, par le lien du mot-clé unique je récupère les brèves de même famille.

Un article lié à une brève

Si ma brève recense tous les articles de même « Nom » de genre, il faudrait aussi que l’article signale automatiquement l’éventuelle brève qui recense les autres végétaux de même genre. Voici :

        <B_breves_rubrique>

[(#REM) recuperer le genre_breve <= alphabetiquement au genre_article
donc au nom latin de l'espece
]
        <BOUCLE_breves_rubrique(BREVES) {id_rubrique=12} {titre<=#SOUSTITRE}
{par titre} {n-1,n}>
[
(#REM) verifie que le genre_breve recense bien l'article courant : le
sous-titre de l'article contient alors le titre de la breve ;
espace apres BALISE pour resoudre cas : TITRExxx = soustitre : muscari/muscaria
et ^apres == pour resoudre cas : xxTITRE = soustitre : carpinus/pinus
]
                <BOUCLE_genre(ARTICLES) {id_rubrique=1} {soustitre==^#TITRE }
{id_article=#ID_ARTICLE}>
               
                                <div>dans ce genre <a
href="#URL_BREVE">#_breves_rubrique:TITRE</a></div>
[
(#REM) affiche les especes du meme genre si donc l'espece courante est
dans la liste ; espace apres balise, dans critere, pour eviter
rosa<=rosanema
]
                                <BOUCLE_genre_suite(ARTICLES) {id_rubrique=1}
{soustitre==^#_breves_rubrique:TITRE } {par titre} {"<br>"}>
[(#EXPOSE{<strong>,<a href='#URL_ARTICLE'
title='[(#SOUSTITRE|textebrut|entites_html)]'>})][<sub>&deg;</sub>
(#TITRE)][(#EXPOSE{</strong>,</a>})][ ((#SOUSTITRE))]
</BOUCLE_genre_suite></BOUCLE_genre>
        </BOUCLE_breves_rubrique>
        </B_breves_rubrique>

Ici, je récupère la brève dont le nom (#TITRE) est immédiatement inférieur au nom en latin de ma plante (le nom international) avec :
{titre<=#SOUSTITRE} {par titre} {n-1,n}. Ainsi, Viburnum est alphabétiquement avant Viburnum opulus ET le titre Viburnum est unique.

Malheureusement, si je ne fais pas un article pour chaque genre, ce sera la brève pour le genre Valerianelle, par exemple qui apparaitrait. Effectivement, je n’ai de fiche (brève) « genre » que lorsque plusieurs espèces en sont recensées. D’où un test supplémentaire avec <BOUCLE_genre(ARTICLES)> qui vérifie que l’article en cours a bien un sous titre compatible avec le titre de la brève « genre ». Sinon, rien ne s’affiche. Dans le cas de test positif, je liste les articles rattachés à la même brève (les espèces de même genre).

Pour compliquer inutilement, j’ai mis les articles et les brèves de mon exemple dans des secteurs différents, mais bon.

Pourquoi faire simple quand on peut faire pire. Il y a deux astuces pour ne pas avoir des articles listés inopinément car le début de leur sous-titre correspond au titre de la brève « genre » (exemple avec Muscaria/Muscari) ou qu’inversement le titre de la brève apparaisse dans le contenu du sous-titre de l’article (exemple : Rosa/Anemone nemorosa). Ainsi, il y a un espace mis après la balise de critère : {soustitre==^#_breves_rubrique:TITRE } de la boucle BOUCLE_genre_suite. Il y a aussi un autre espace après balise, pour #TITRE dans {soustitre==^#TITRE } de la boucle BOUCLE_genre.

Le mot-clé commun aux brèves et aux articles

J’ai un seul squelette mot-clé, sans <inclure>. Je souhaite que pour le type 21 (le groupe des « familles ») un encart affiche la liste des genres si bien sûr des brèves « genres » existent. Ce qui n’est pas le cas dans toutes les familles (ici pour les caprifoliacées). Voilà donc une dernière boucle plus commune :

[(#REM)Breves liees au mot-cle ("genres" par famille (mots)]
	<B_breves>
	<BOUCLE_genre(BREVES) {id_mot} {id_groupe=21} {0,1}>
[(#REM)si plusieurs especes de ce genre dans la base]
Quelques genres</BOUCLE_genre></B_genre><:breves:><//B_genre>
		
	<BOUCLE_breves(BREVES) {id_mot} {par titre}>
		<a href="#URL_BREVE">#TITRE</a>
	</BOUCLE_breves>
	</B_breves>

Si j’ai au moins une brève à laquelle le mot-clé courant est attribué alors je crée mon encart. Puis, je liste mes genres.

Conclusion

Une méthode un peu tarabiscotée pour éviter des rubriques « familles », des sous-rubriques « genres » et des articles « espèces ». Il me semble que celà aurait été trop lourd à gérer (en terme de navigation interne) et surtout j’évite de reprendre les 700 articles d’une rubrique pour les dispatcher dans de nouvelles sous-rubriques.

Les déclinaisons peuvent être multipliées : par exemple, on peut utiliser le champ descriptif des mots-clés soit pour faire des sous-groupes, soit pour créer des intergroupes comme les « chef-lieu » trouvés dans le champ descriptif des villes classées par groupe « départements » (groupes « Ain », « Aisne », …).

On pourrait aussi utiliser des mots-clés qui recensent d’autres mots-clés, etc.

Pour appliquer cette contribution à des noms de familles de personnes, la présence de la virgule dans la série « Nom1 Nom2-Nom3, Prénom1 Prénom2-Prénom3 Prénom4 » pourrait simplifier les boucles.

Une prochaine étape peut être une page qui recense automatiquement les genres (c’est à dire qui trouve plus de deux articles avec le même début de descriptif) et signale ceux pour lesquels il n’existe pas de brève. L’administrateur peut ainsi voir la liste des fiches à créer en fonction de l’avancement des parutions. Puis la page qui écrit d’elle-même les brèves, puis celle qui les valide, puis celle qui fait le café.

Discussion

2 discussions

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