Revenons au fichier « rubrique.html ». Nous l’avions laissé avec une méchante BOUCLE_articles, sans intérêt pour notre site, puisqu’elle ne classait pas les articles par catégories.
Le monde est bien fait : nous venons de programmer une telle fonctionnalité pour les articles !
Il suffit donc de copier-coller le bloc qui nous intéresse, de l’insérer à la place de la BOUCLE_articles (qui disparaît donc), et de voir s’il y a des modifications nécessaires. Ce qui nous donne :
<BOUCLE_les_articles(RUBRIQUES){id_rubrique}>
<B_tests><p>Les tests de ce jeu :
<ul>
<BOUCLE_tests(ARTICLES){id_rubrique}{titre_mot=Test}>
<li>
<BOUCLE_tests_machines(MOTS){id_article}{type=Machines}>
[(#LOGO_MOT)]
</BOUCLE_tests_machines>
<a href="#URL_ARTICLE">#TITRE</a> - [(#DATE|affdate)]
</BOUCLE_tests>
</ul>
</B_tests>
<B_previews><p>Les previews de ce jeu :
<ul>
<BOUCLE_previews(ARTICLES){id_rubrique}{titre_mot=Preview}>
<li>
<BOUCLE_previews_machines(MOTS){id_article}{type=Machines}>
[(#LOGO_MOT)]
</BOUCLE_previews_machines>
<a href="#URL_ARTICLE">#TITRE</a> - [(#DATE|affdate)]
</BOUCLE_previews>
</ul>
</B_previews>
<B_soluces><p>Les soluces de ce jeu :
<ul>
<BOUCLE_soluces(ARTICLES){id_rubrique}{titre_mot=Soluce}>
<li>
<BOUCLE_soluces_machines(MOTS){id_article}{type=Machines}>
[(#LOGO_MOT)]
</BOUCLE_soluces_machines>
<a href="#URL_ARTICLE">#TITRE</a> - [(#DATE|affdate)]
</BOUCLE_soluces>
</ul>
</B_soluces>
<B_astuces><p>Les trucs et astuces de ce jeu :
<ul>
<BOUCLE_astuces(ARTICLES){id_rubrique}{titre_mot=Astuces}>
<li>
<BOUCLE_astuces_machines(MOTS){id_article}{type=Machines}>
[(#LOGO_MOT)]
</BOUCLE_astuces_machines>
<a href="#URL_ARTICLE">#TITRE</a> - [(#DATE|affdate)]
</BOUCLE_astuces>
</ul>
</B_astuces>
<BOUCLE_news(ARTICLES){id_rubrique}{titre_mot=News}{par date}{inverse}{0,1}>
<p><a href="news_jeu.php3?id_rubrique=#ID_RUBRIQUE">Les news de ce jeu</a> - dernière mise-à-jour : [(#DATE|affdate)]
</BOUCLE_news>
</BOUCLE_les_articles>
Les modifications apportées :
- inutile de changer la requête {id_rubrique}
, puisque c’était déjà sur cette rubrique que l’on se basait dans les articles ;
- supprimons tous les {doublons}
, ils ne sont d’aucune utilité ici (il n’y a pas d’article déjà affiché) ; autant ne pas prendre le risque de conflits avec de futurs développements de notre page s’ils ne servent à rien ;
- l’ensemble est installé dans une grande BOUCLE_les_articles. Que fait cette boucle ? Strictement rien : elle renvoit la rubrique dans laquelle nous nous trouvons déjà. Mais elle nous sera utile ci-après...
L’autre point faible de notre page était la BOUCLE_jeux, dans laquelle la BOUCLE_avec_articles profitait de son passage pour afficher la liste des articles de la sous-rubrique sans effectuer de tri. Or, trier les articles d’une rubrique, c’est ce que nous venons de faire ci-dessus.
Modifions donc la BOUCLE_jeux ainsi :
<BOUCLE_jeux(RUBRIQUES){id_parent}{par titre}>
<B_avec_articles>
<h4><a href="#URL_RUBRIQUE">#TITRE</a></h4>
[(#LOGO_RUBRIQUE|right)]
<ul>
<BOUCLE_avec_articles(ARTICLES){id_rubrique}{0,1}>
<BOUCLE_repeter_articles(boucle_les_articles)></BOUCLE_repeter_articles>
</BOUCLE_avec_articles>
</ul>
</B_avec_articles>
</BOUCLE_jeux>
La BOUCLE_avec_articles est désormais effectuée une seule fois (sur un seul article), ce qui est suffisant pour savoir si elle contient un article. On voit apparaître une BOUCLE_repeter_articles : il s’agit d’un boucle qui reproduit exactement le comportement de la BOUCLE_les_articles, à partir de l’endroit où elle se trouve (c’est-à-dire qu’elle démarre non plus depuis la rubrique principale, mais de la sous-rubrique). L’intérêt désormais de limiter la BOUCLE_avec_articles à un unique élément est alors clair : sans cette limitation, la BOUCLE_repeter_articles serait exécutée autant de fois qu’il y a d’articles dans la sous-rubrique.
Évidemment, le résultat graphique de cet exemple est hideux : trop chargé, peu clair. Disons qu’il était intéressant d’utiliser une « boucle récursive » dans ce tutorial...