Épingler des articles liés à des mots-clés avec #ARRAY

Ceci est une « contribution pédagogique », qui montre par l’exemple comment développer une nouvelle fonctionnalité pour SPIP.

Le but de la manœuvre : « déterrer » ou « épingler » certains articles toujours d’actualité... pour étoffer judicieusement le contenu d’une marge par exemple. Rien de plus simple me direz-vous. Mais, si ces articles « épinglés » étaient liés à un ou plusieurs mots-clés thématiques, on voudrait qu’ils soient affichés sous l’un d’entre eux. Enfin, on voudrait aussi pouvoir aussi épingler les articles non « tagués » par des mots thématiques.

Précisions

  • On va détourner un seul mot-clé, qui servira d’épingle, que l’on appellera dans notre exemple « z_epingles » et que l’on distinguera des autres mots en le mettant dans un groupe à part appelé « Z » : c’est une sorte de « faux mot-clé » ;
  • A l’aide de ce mot-clé unique « z_epingles », on épinglera des articles déjà liés à des « vrais » mots-clés... et/ou des articles pas forcément liés à des mots-clés ;
  • Faute de place, on veut, quoiqu’il arrive, prendre uniquement les dix derniers articles épinglés, qu’il soient liés ou non à de « vrais » mots-clés... et les afficher du plus récent au moins récent ;
  • Aucun plugin nécessaire.

L’exemple

Articles épinglés par mots-clés
Ici, trois articles ont été épinglés avec un mot-clé « épingle ». Le premier était lié à deux mots-clés thématiques : histoire et conférence. Par hasard, la boucle a choisi « Conférences ». Les deux autres étaient liés à plusieurs mots-clés... dont un commun : « Écologie » : ils ont été regroupés sous celui-là.

La boucle

[(#REM) Dans deux tableaux, on sélectionne les 10 derniers articles épinglés,
et pour chacun d'entre eux on sélectionne au hasard l'un des mots-clés...
tout en éliminant les doublons éventuels...]				

#SET{motsepingles,#ARRAY}
#SET{articlesepingles,#ARRAY}
	
<BOUCLE_articlesepingles(ARTICLES){titre_mot=z_epingles}{!par date}{0,10}>				
#SET{articlesepingles,#GET{articlesepingles}|push{#ID_ARTICLE}}		
<BOUCLE_motsarticlesepingles(MOTS){!type==^Z}{id_article}{doublons motsepingles}{par hasard}>
	#SET{motsepingles,#GET{motsepingles}|push{#ID_MOT}}
</BOUCLE_motsarticlesepingles>

</BOUCLE_articlesepingles>

[(#REM) Sous chacun de ces mots-clés sélectionnés, on regroupe les articles épinglés concernés]

<BOUCLE_motsepingles(MOTS){id_mot IN #GET{motsepingles}}>
<B_epinglesparmot>
<h2>#TITRE</h2>
<div class="menu menu_epingles">
<ul>
<BOUCLE_epinglesparmot(ARTICLES){id_mot}{id_article IN #GET{articlesepingles}}{doublons epinglesmots}>
<li>
<a href="#URL_ARTICLE" rel="bookmark" title="#TITRE" alt="">
#TITRE
</a>
</li>  	
</BOUCLE_epinglesparmot>
</ul>
</div><!--.menu_epingles-->	
</B_epinglesparmot>
</BOUCLE_motsepingles>
	
</B_articlesepingles>

[(#REM) Partie conditionnelle permettant d'afficher autre chose
si la boucle ne donne rien ]

<//B_articlesepingles>

Pour les articles épinglés qui ne seraient pas rattachés à des mots-clés thématiques...

Si l’on souhaite pouvoir « épingler » également des articles qui ne sont pas forcément rattachés à des mots-clés thématiques (c’est à dire qui sont seulement « tagués » par notre unique mot-clé « z_épingles ») alors il suffit d’ajouter ce code juste avant la dernière balise (celle qui ferme la partie conditionnelle de la boucle principale) :

[(#REM) Et les articles épinglés ne contiennent aucun mot thématique...]
<B_epinglesansmot>
<h2>A lire aussi</h2>
<div class="menu menu_epingles">
<ul>
<BOUCLE_epinglesansmot(ARTICLES){id_article IN #GET{articlesepingles}}{doublons epinglesmots}>
<li>
<a href="#URL_ARTICLE" rel="bookmark" title="#TITRE">
[(#LOGO_ARTICLE|sinon{[(#GET{logo_dossier})]}|image_passe_partout{65,65}|image_recadre{65,65,center})]#TITRE
</a>
</li>  	
</BOUCLE_epinglesansmot>
</ul>
</div><!--.menu_epingles-->	
</B_epinglesansmot>			
</ul>
</div><!--.menu_epingles-->	
</B_epinglesansmot>	

Ce qui donne au final

Liste des articles épinglés, avec ou sans vrai mot-clé
En priorité, on épingle les articles rattachés à un « vrai » mot-clé, du plus récent au moins récent, en les regroupant par mot le cas échéant (seule exception à la chronologie). A la fin, sous une case générique « A lire aussi », on regroupe toutes les articles épinglés qui n’ont pas de mot-clé thématique.

Remarque : Les tableaux permettent de conserver le tri des boucles (ici par date inverse), par exemple pour épingler les plus récents en premier.

Discussion

Une discussion

  • 1

    A l’evidence certains ont vote tres bas cet article. Ce serait productif de signaler ce qui ne leur va pas dans les commentaires car j’aimerai connaitre la raison.

    • il doit y avoir un pb dans le compteur. Deux votes, donc le mien qui est « j’aime » et on a un score aussi bas ...

    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