Dans le squelette mot par défaut, le menu de navigation affiche tous les mots-clés du même groupe. Cela peut poser deux problèmes. Le premier, une énumération trop longue, qu’on peut résoudre par un critère limitant le nombre d’occurences affichées. Le deuxième est l’affichage de mots-clés auquels aucun article (ou rubrique, site, etc.) n’est lié. Celà arrive lorsque l’on saisit toute une liste de mots-clés au début de la construction d’un site. Donc voici le principe qui permet de n’afficher que les mots-clés ayant au moins un article lié.
la boucle expliquée :
Menu de navigation mots-clés : les autres mots-clés du meme groupe : rajout : exclusion des mots non attribues
Le squelette débute une boucle pour placer du « code HTML optionnel avant » :
<B_mots_freres>
<h2 class="structure"><:mots_clefs_meme_groupe:></h2>
<div class="menu">
<div class="divers">
<div class="menu-titre">
Le squelette affiche le nom du groupe de mots-clés comme titre du menu dans le « code HTML optionnel avant » :
<BOUCLE_groupe(GROUPES_MOTS) {id_groupe} {doublons}>
#TITRE
</BOUCLE_groupe>
</div>
<ul class="menu-liste">
Le squelette débute une boucle (MOTS) : la liste triée des mots du groupe :
<BOUCLE_mots_freres(MOTS) {type} {doublons} {par titre}>
Rajout_1 : je sélectionne les articles auquels des mots du groupe [{type}
ci-dessus] sont attribués, mais je n’affiche rien :
<BOUCLE_existe(ARTICLES) {id_mot}>
</BOUCLE_existe>
Retour à l’affichage des données par défaut pour la boucle (MOTS) ici en « code HTML optionnel après » de ma boucle (ARTICLES), donc pour les mots ayant au moins un article attribué :
<li class="menu-item">
<a href="#URL_MOT" title="[(#DESCRIPTIF|textebrut|entites_html)]">
#DESCRIPTIF
</a></li>
Rajout_2 : je termine ma boucle (ARTICLES) d’après le « code HTML optionnel » :
</B_existe>
Le squelette clos enfin la boucle « (MOTS) dans ce groupe » :
</BOUCLE_mots_freres>
La totale qui peut remplacer la boucle « Menu de navigation mots-cles » de mot-dist.html :
<!-- Menu de navigation mots-cles : les autres mots cles du meme groupe (avec rajout d'exclusion des mots non attribues -->
<B_mots_freres>
<h2 class="structure"><:mots_clefs_meme_groupe:></h2>
<div class="menu">
<div class="divers">
<div class="menu-titre">
<BOUCLE_groupe(GROUPES_MOTS) {id_groupe} {doublons}>[(#TITRE|supprimer_numero)]
</BOUCLE_groupe>
</div>
<ul class="menu-liste">
<BOUCLE_mots_freres(MOTS) {type} {doublons} {par titre}>
<BOUCLE_existe(ARTICLES) {id_mot}>
</BOUCLE_existe>
<li class="menu-item">
<a href="#URL_MOT" title="[(#DESCRIPTIF|textebrut|entites_html)]">#DESCRIPTIF</a></li>
</B_existe>
</BOUCLE_mots_freres>
</ul>
</div>
</div>
Maintenant que le principe est connu on peut le décliner
Voici un cas avec des rubriques :
Vous avez des succursales dont vous voulez une présentation par départements (provinces, cantons, comtés, régions, districts...). Chaque succursale bénéficie d’un rubrique mais un département peut avoir plusieurs succursales et un autre aucune. Votre structure est bougeante, donc vous avez saisi un groupe de mots-clés recensant tous vos territoires potentiels. Seulement vous ne voulez pas afficher la liste des territoires vides, ça fait mauvais genre si ce n’est « pauvre ». La boucle expliquée ; n’hésitez pas à la nettoyer pour l’utiliser. Celà évitera l’affichage de caractères inutiles dans votre page.
<dt>
<B_departements>#PUCE groupes par départements
<BOUCLE_departements(RUBRIQUES) {racine} {id_groupe=1}>
<dd><B_liste_departements><br>
<BOUCLE_liste_departements(MOTS) {id_groupe=1} {par titre} {unique}>
<!--rajout debut-->
<BOUCLE_existe_departements(RUBRIQUES) {id_mot}>
</BOUCLE_existe_departements>
<!--suite boucle normale-->
[<br>(#TITRE)<br>]
<!--suite et fin rajout-->
</B_existe_departements>
<!--retour boucle normale-->
<B_groupes_departements>
<BOUCLE_groupes_departements(RUBRIQUES) {id_mot}>
<a href=#URL_RUBRIQUE>
<div class ="chapo">#TITRE</div>
[<div class="texte">(#DESCRIPTIF)</div>]
</a>
</BOUCLE_groupes_departements>
</BOUCLE_liste_departements>
</BOUCLE_departements>
<dt>
Un autre cas légèrement modifié, toujours avec des rubriques :
Vous avez une radio. Vous avez divisé arbitrairement votre semaine en 7 jours pour en faire autant de groupes de mots-clés. Chacun est divisé de 1/2 h en 1/2 h (8 h 30, 9 h 00, 9 h 30... 23 h 30 etc. [1]). Malheureusement, une émission qui démarre à 18 h 00 ne se remplace pas systématiquement par une autre à 18 h 30 et certaines émissions peuvent se partager le même créneau à des semaines différentes. Voici une adaptation — à habiller— de la boucle précédente ; ici pour le dimanche (id_groupe=7) qui termine cette semaine (mais elle peut terminer le mercredi ou le mardi à votre choix) :
<B_dimanche>
#PUCE dimanche
<BOUCLE_dimanche(RUBRIQUES) {racine} {id_groupe=7}>
<BOUCLE_liste_dimanche(MOTS) {id_groupe=7} {par titre} {unique}>
<BOUCLE_groupes_dimanche(RUBRIQUES) {id_mot}>
<a href=#URL_RUBRIQUE><div>#TITRE</div></a>
</BOUCLE_groupes_dimanche>
</BOUCLE_liste_dimanche><br></B_liste_dimanche>
</BOUCLE_dimanche>
Discussions par date d’activité
3 discussions
Bonjour,
j’aimerais fabriquer une boucle MOTS qui affiche les seuls mots clés liés à un article pour :
- les 24 derniers articles rédigés (!par date)
- du groupe de mot numéro 3
Et je galère.
Des pistes SVP ??
Merci.
Quelque chose comme ça peut-être :
Presque, merci. Le truc, c’est que je ne souhaite pas voir s’afficher X fois le même mot clé. Il faudrait qu’il ne s’affiche qu’une seule fois
Je me réponds :
Merci encore @DD :)
Répondre à ce message
Alternative « moderne » : Afficher une liste avec seulement les mots clefs liés à des articles et le nombre d’articles liés
La liste n’étant plus accessible par ce lien, voici le message en question :
Problématique : Permettre une recherche dans le site des articles selon
les mots clefs qui leurs sont affecté.
Apparence : Afficher une liste déroulante avec le titre des groupes de
mot clef non clicables et le titre des mots avec entre parenthèse le
nombre d’articles liés.
Challenge : ne pas afficher les mots clefs sans article.
Code :
Décortication :
La BOUCLE_RechercheMot va parcourir les groupes de mot
Et les afficher dans
C’est une balise HTML qui sert précisément à afficher un texte non
clicable dans une liste déroulante pour séparer celle-ci en plusieurs
groupes (voir http://www.aliasdmc.fr/balise/zone_html_optgroup.html).
La BOUCLE_Mots va cherche les mots clef du groupe en cours.
Mais il y a une GROSSE astuce.
Au lieu de faire :
C’est :
(MOTS mots_articles) : permet de demander à SPIP de faire la jointure
entre la table des mots et la table mots_articles (celle qui dit que tel
mot et affecté à tel article).
id_article>0 permet de ne renvoyer QUE les mots qui ont effectivement
au moins un article.
affiche le nombre d’articles du mot en cours.
Merci, ton astuce m’a bien aidé, ça marche !
J’en avais besoin pour trier les mots clés qui ne sont liés à aucun document :
Bonne continuation
Répondre à ce message
Etant donné que Google ropose toujours cette vieille page lorsqu’on se pose la question, voici donc une réponse moderne : jointer les tables.
On jointe la table MOTS avec la table mots_articles dans laquelle on cherche un identifiant supérieur à 0. Si 0, pas d’article attribué.
Pour jointer les tables c’est très simple
Hello,
Sauf que si j’ai un article en cours de rédaction, la table n’est pas vide et le mot apparait !
Comment éviter cela ?
Merci
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 :
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.
Suivre les commentaires : |