Une noisette sert à placer à part le code SPIP de tel ou tel bloc affiché à l’identique en plusieurs endroits différents du site, pour éviter d’avoir à répéter ce code à l’identique dans chaque squelette. Mais il arrive plus souvent que l’on aie besoin d’afficher le même bloc partout... sauf ici
.
Par exemple, votre première rubrique contient les éditos du site. Vous souhaitez que les premières lignes du dernier édito s’affichent sur toutes les pages du site, sauf sur la page même de cet édito, bien évidemment ;-)
Vous avez donc créé une noisette prénommée inc-edito.html et l’avez incluse dans chaque squelette. Et après ?
La première solution consiste à créer un squelette spécifique, ici appelé rubrique-1.html (et/ou article-1.html), qui contient exactement la même chose que rubrique.html (et/ou article.html), à cette seule différence près que vous n’y incluez pas la noisette.
Pour éviter la multiplication de squelettes spécifiques, tous semblables à un détail près, faites des noisettes conditionnelles ! C’est-à-dire des noisettes qui s’afficheront, ou pas, selon le contexte.
1. Inclure la noisette dans tous les squelettes, de cette façon [1] :
<INCLURE(page.php3){fond=inc-edito}{id_rubrique}>en n’oubliant pas de passer l’élément en cours en critère (soit {id_rubrique} et/ou {id_article}), qui permet à la noisette de savoir où elle se trouve.
2. Coder la noisette correspondante, inc-edito.html, de cette façon :
<BOUCLE_rubrique(RUBRIQUES){id_rubrique}{id_rubrique=1}> </BOUCLE_rubrique>
<BOUCLE_edito(ARTICLES){id_rubrique=1}{!par date}{0,1}>
<h2><a href="#URL_ARTICLE">#TITRE</a></h2>
<div class="texte">#INTRODUCTION</div>
</BOUCLE_edito>
<//B_rubrique>C’est-à-dire : la boucle « rubrique » vérifie quelle est la rubrique en cours. Si celle-ci est la rubrique 1, la boucle s’arrête à </BOUCLE_rubrique> [2] et... n’affiche donc rien. Sinon, on passe à la suite, en l’occurrence la boucle « edito » qui affiche le dernier article de la rubrique 1.
Exemple d’application : le site « Cher 2015 » est construit avec des noisettes conditionnelles. Ses squelettes sont disponibles sur SPIP-Contrib.
[1] La syntaxe pour l’inclusion sera différente selon la version de SPIP utilisée. Voir : INCLURE d’autres squelettes.
[2] Voir la syntaxe des boucles SPIP, tout simplement, en particulier la seconde partie : « Syntaxe complète ».
Imprimer
PDF
Envoyer





Vos commentaires
1. Le 22 mai 2006 à 18:41, par alexandra
En réponse à : Noisettes conditionnelles
Merci Romy pour cette article. Notre écureuil préféré va être content de toutes ses belles noisettes :-)
2. Le 23 mai 2006 à 16:50, par Miss Mopi
En réponse à : Noisettes conditionnelles
Uhuh Je suis à fond dans les noisettes conditionnelles en ce moment.
Mais j’ai remonté le test dans le squelette et non dans la noisette et j’ai géré des noisettes différentes. A réfléchir... (<- c’est à moi que je dis ça.) Je me demande si ce n’est pas parce que je passe deux critères ou un seul en fonction du contexte.
3. Le 26 juillet 2006 à 08:07, par opessin(at)gmail.com
En réponse à : Noisettes conditionnelles
J’utilise personellement des mots pour activer/désactiver certaines fonctionnalités optionelles de mes articles ... comme un mode « album photo » pour les documents.
Ainsi, l’activation au niveau des articles par exemple peut ensuite se faire via l’interface d’admin, sans toucher aux squelettes.
Je regrette au passage qu’il n’y ait pas un champ identifiant (une sorte de clé) entre du nom (trop vague) et du id_mot (qui me forcerait à hardcoder une valeur donnée de champ auto incrémentable)
Je me pose aussi la question des performances lorsqu’on a beaucoup de boucles... j’imagine que ça doit generer pas mal de requêtes SQL... (bon, il se trouve que mon hébergeur est peu recommandé). Heureusement, il y a le cache...
4. Le 20 mars 2008 à 19:37, par Aurélia
En réponse à : Noisettes conditionnelles
Merci infiniment pour cet article éclairant, simple, accessible et permettant de construire des variantes de design sans multiplier les pages article- ou rubrique=.
Bravo !
Aurélia.
Un message, un commentaire ?
Suivre les commentaires :
| 