Un tableau d’articles à entrées multiples en fonction des mots-clés associés

problématique

comment faire figurer les articles dans un tableau à entrées multiples, fonction des mots clés qui leurs sont attribués ?

Imaginons par exemple que j’aie un site consacré à la cuisine internationale. A chaque rubrique correspond un pays. Et pour chaque plat, j’associe un mot clé précisant si c’est une entrée, un plat, un dessert, et un autre mot-clé précisant quel type de vin accompagne idéalement le plat.

Je peux vouloir créer une page sur laquelle les plats sont triés en fonction du type de plat (entrée, plat, dessert) et en fonction du vin qui l’accompagne le mieux. Je veux donc faire un tableau à double entrée.

Boucles

La boucle qui permet de faire cela est la suivante :

<BOUCLE_groupe_un (MOTS) {id_groupe=1} {par titre}>
<BOUCLE_groupe_deux (MOTS) {id_groupe=2} {par titre}>
<BOUCLE_articles_lies_un (ARTICLES) {id_mot=#_groupe_un:ID_MOT}>
<BOUCLE_articles_lies_deux (ARTICLES) {id_article} {id_mot=#_groupe_deux:ID_MOT}>
</BOUCLE_articles_lies_deux>
</BOUCLE_articles_lies_un>
</BOUCLE_groupe_deux>
</BOUCLE_groupe_un>

Remarques : Dans cet exemple de code, j’ai utilisé le critère {id_groupe=XX}, dans un soucis de simplicité. Je vous recommande cependant de lui préférer un critère de type {type=XXX}, ce qui vous permet de vous affranchir de la numérotation de la base de données au profit des noms de vos groupes de mots-clés. Ainsi, en cas de fausse manipulation qui aurait pour conséquence de changer le numéro de vos groupes (suite à un effacement accidentel par exemple), vous n’avez pas à modifier les squelettes, mais simplement à conserver un nom de groupe identique.

ATTENTION !!! Vous ne pouvez avoir qu’un seul mot clé de chaque groupe attaché à chaque article !!! Autrement dit, vous devez avoir un article par élément du tableau.

Explications

Quel est le principe de tout cela ?

La boucle _groupe_un parcourt un à un tous les mots clés du groupe un.
Puis, pour chaque mot clé du groupe un, la boucle _groupe_deux parcourt tous les mots clés du groupe deux. Nous avons donc construit à ce stade chaque couple de mots clés, triés par titres.

La boucle articles_lies_un parcourt ensuite chaque article et ne retiens
que ceux qui sont liés à un mot du groupe un.
La boucle articles_lies_deux vérifie ensuite pour chaque article qui possède un mot clé du groupe un s’il possède aussi un mot clé du groupe deux (grâce au critère id_article).

(Pour l’explication de la signification de la balise #_groupe_deux_inc:ID_MOT, on se référera à la documentation sur les nouvelles balises).

Introduction du HTML

Pour afficher le tableau proprement dit, on pourra par exemple utiliser le code suivant :

<B_groupe_un>

<table border="1" summary="Tableau présentant les articles qui ont pour mots clés un ou plusieurs mots clés du groupe 1 _ET_ un ou plusieurs mots-clés du groupe deux">

<caption>Articles traitant à la fois du theme du groupe un et du theme du groupe deux, triés par couples de mots clés.</caption>

<!--Cette première boucle permet d'obtenir la première ligne du tableau (la liste des mots clés du groupe deux).-->
<tr><td></td>
<BOUCLE_th_groupe_deux (MOTS) {id_groupe=2} {par titre}>
<th scope="row">#TITRE</th>
</BOUCLE_th_groupe_deux>
</tr>

   <BOUCLE_groupe_un (MOTS) {id_groupe=1} {par titre}>
      <!--Ici débute les lignes qui composent le tableau, une par élément contenu dans le groupe de mots clés 1.-->
      <tr>
      <!--Cette balise correspond à la première colonne du tableau.-->
      <th scope="col">#TITRE</th>
         <BOUCLE_groupe_deux (MOTS) {id_groupe=2} {par titre}>
               <B_articles_lies_un>
               <!--C'est ici que se remplissent caque case du tableau.-->
               <td>
                  <BOUCLE_articles_lies_un (ARTICLES) {id_mot=#_groupe_un:ID_MOT}>
                     &nbsp;<BOUCLE_articles_lies_deux (ARTICLES) {id_article} {id_mot=#_groupe_deux:ID_MOT}>
                        <a href="#URL_ARTICLE" hreflang="#LANG" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a>
                     </BOUCLE_articles_lies_deux>&nbsp;
                  </BOUCLE_articles_lies_un>
               </td>
               </B_articles_lies_un>
            <!--Ce code alternatif permet d'avoir une case vide dans le tableau dans le cas où il n'y a pas d'article lié à cette combinaison de mots clés.-->
            <td>&nbsp;</td>{
            <//B_articles_lies_un>
         </BOUCLE_groupe_deux>
      </tr>
   </BOUCLE_groupe_un>
</table>
</B_groupe_un>

Ce qui nous donne le résultat suivant (par exemple) :

On trouvera toutes les informations qui traitent des tableaux en HTML 4.01 dans la recommandation W3C.

Pour aller plus loin

On peut réaliser ainsi des tableaux à entrées multiples en ajoutant des boucles (MOTS) et (ARTICLES).

On peut aussi procéder ainsi pour toutes les boucles qui acceptent des mots clés : RUBRIQUES, BREVES, SYNDICATION et FORUM, ainsi que celles qui s’y ajouteront.

Autre méthode

Il est possible d’obtenir la même chose en utilisant les doublons nommés.

Discussion

Aucune discussion

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