squelette navigation

Bonjour,

Pour la refonte du site de mon asso (ahuana.com), je voudrais faire un menu, qui se présenterait sous la forme suivante :

. Rubrique 1
  .article 1
  .article 2
  .article 3
. Rubrique 2
. Rubrique 3

J'ai donc pondu la boucle suivante, insérée dans article.html :

<BOUCLE_nav1_rub (RUBRIQUES)>
  <ul class="nav_id_rubrique">
  [(#LOGO_RUBRIQUE|left|#URL_RUBRIQUE)] #TITRE
  </ul>
    <BOUCLE_articles_nav1 (ARTICLES){id_rubrique}>
      <ul class="nav_id_article">
      <a href="#URL_ARTICLE">#TITRE</a> <br />
      </ul>
    </BOUCLE_articles_nav1>
  </BOUCLE_nav1_rub>

Et pourtant, j'obtiens le résultat suivant :

. Rubrique 1
  .article 1
  .article 2
  .article 3
. Rubrique 2
  .article 4
  .article 5
  .article 6
. Rubrique 3
  .article 7
  .article 8
  .article 9

Comment faire pour restreindre l'affichage des articles à la rubrique donc l'article affiché fait partie ?

Merci d'avance !

Comment faire pour restreindre l'affichage des articles à la rubrique donc l'article affiché fait partie ?

Regarde dist/inc-rubriques.html et l'utilisation de la balise #EXPOSE qui permet de faire ce que tu souhaites.

Eric

Eric Lurand a écrit :

Comment faire pour restreindre l'affichage des articles à la rubrique donc l'article affiché fait partie ?

Regarde dist/inc-rubriques.html et l'utilisation de la balise #EXPOSE qui permet de faire ce que tu souhaites.

Eric

Merci Eric pour ta réponse, que toutefois j'ai peur de ne pas bien comprendre...
Si j'ai bien lu le manuel des balises, la balise #EXPOSE me semble servir à faire ressortir graphiquement (taille, graisse, etc) la rubrique ou l'article en cours.
Or mon but est plutôt de supprimer du menu les articles dépendant des
autres rubriques que celle dont dépend l'article affiché.

Pour ma boucle <BOUCLE_articles_nav1>, j'ai bien essayé les filtres {branche}, {id_rubrique} et {id_secteur} mais ceci me permet uniquement de trier les articles en fonction de leur rubrique dans l'arborescence, mais pas du tout en fonction de l'article affiché et de la rubrique dont il est issue.

J'ai aussi essayé le filtre {id_rubrique=#ENV{id_rubrique}}, trouvé dans
le squelette de spip.net (squelettes/inc-rubriques.html), mais cette
fois, ça ne renvoie plus que les noms de rubriques (aucun article).

Au cas où #EXPOSE aurait des vertus autres que graphiques, j'ai aussi tenté {id_rubrique=#EXPOSE}, {id_rubrique=#EXPOSE{id_rubrique}} et {id_rubrique=(#EXPOSE{id_rubrique})}, qui me renvoient un message d'erreur (Champ #EXPOSER hors boucle, _nav1_rub)

J'ai même essayé la boucle entière du squelette de spip.net, mais ça ne
revoie même pas les noms de rubriques :

<div class="rubriques">
<BOUCLE_rubriques(RUBRIQUES){lang}{racine}{id_rubrique!=4}{id_rubrique!=324}>

<h2 class="menu-titre"><:navigation:></h2>

<B_sousrub><ul>
<BOUCLE_sousrub(RUBRIQUES){id_parent}{par num titre}>
<li><a href="#URL_RUBRIQUE"[ class="(#EXPOSE)"]>#TITRE</a>

<B_articles><ul class="memrub">
<BOUCLE_articles(ARTICLES){id_rubrique}{id_rubrique=#ENV{id_rubrique}}
{par num titre}{!par date}>
<li><a href="#URL_ARTICLE"[ class="(#EXPOSE)"]>#TITRE</a></li>
</BOUCLE_articles>

</ul></B_articles>

<BOUCLE_re(BOUCLE_sousrub)></BOUCLE_re>

</li>
</BOUCLE_sousrub>
</ul></B_sousrub>

</BOUCLE_rubriques>
</div>

Ceci me laisse penser que le filtre de ma boucle <BOUCLE_articles_nav1> fonctionne selon la boucle <BOUCLE_nav1_rub> dont la première dépend et non selon le contexte général de la page...

Voici donc ma boucle dans l'état actuel :

<BOUCLE_nav1_rub (RUBRIQUES) {tout}>
<p>[(#LOGO_RUBRIQUE|left|#URL_RUBRIQUE)]
<a href="#URL_RUBRIQUE" [class="(#EXPOSE)"]>#TITRE</a> <BOUCLE_test_expose_rub(RUBRIQUES) {id_rubrique}>#EXPOSE{'ok'}</BOUCLE_test_expose_rub><br />
<BOUCLE_articles_nav1 (ARTICLES) {id_rubrique}>
<a href="#URL_ARTICLE" [class="(#EXPOSE)"]> #TITRE</a>
<BOUCLE_test_expose_art(ARTICLES) {id_rubrique}>#EXPOSE{'ok'}</BOUCLE_test_expose_art>
<br />
</BOUCLE_articles_nav1>
</p>
</BOUCLE_nav1_rub>

Et pour ceux qui n'ont pas suivi, je répète que j'ai un menu comme ce qui suit :

. Rubrique 1
  .article 1
  .article 2
  .article 3
. Rubrique 2
  .article 4
  .article 5
  .article 6
. Rubrique 3
  .article 7
  .article 8
  .article 9

Et que je veux qu'il devienne ainsi :

. Rubrique 1
  .article 1
  .article 2
  .article 3
. Rubrique 2
. Rubrique 3

J'espère rester compréhensible...
Merci d'avance à celui ou ceux qui auront la patience de m'aider :smiley:

Si j'ai bien lu le manuel des balises, la balise #EXPOSE me semble 
servir à faire ressortir graphiquement (taille, graisse, etc) la 
rubrique ou l'article en cours.
  
C'est vrai. Plus précisément, spip remplace #EXPOSE par 'on' si l’objet correspond au contexte.
Donc pour un lien pointant vers un article par exemple et écrit de cette manière :
<a href="#URL_ARTICLE" [class="(#EXPOSE)"]>
- si l'article n'est pas dans le contexte, #EXPOSE est vide et la class ne sera pas prise en compte.
- si l'article est dans le contexte, #EXPOSE est on et le lien aura la classe "on", définie par la dist dans spip_style.css comme .on { font-weight: bold; color: #000; } /* liens exposes */ (ligne 102).
Tu peux donc en changer l'aspect graphique à ta guise.

Or mon but est plutôt de supprimer du menu les articles dépendant des
autres rubriques que celle dont dépend l'article affiché.
  
J'avais bien compris. Tu peux aussi utiliser #EXPOSE pour faire un test sur ta boucle pour savoir si elle doit s'exécuter ou pas.
C'est ce que fait le squelette de la dist inc-rubriques.html :

<B_rubriques>
<div class="rubriques">
	<h2 class="menu-titre"><:rubriques:></h2>
	<ul>
	<BOUCLE_rubriques(RUBRIQUES) {racine} {par num titre, titre}>
		<li>
			<a href="#URL_RUBRIQUE"[ class="(#EXPOSE)"]>[(#TITRE|couper{80})]</a>

			<B_sous_rubriques>
			<ul>
				<BOUCLE_sous_rubriques(RUBRIQUES) {id_parent} {par num titre, titre}>

<b>
<BOUCLE_test_expose(RUBRIQUES) {id_enfant}>#EXPOSE{' '}</BOUCLE_test_expose></b>
Cette boucle test #EXPOSE :
- si #EXPOSE n'est pas vide (donc sur on) elle continue comme si de rien n'était.
- si #EXPOSE est vide elle ne tiens pas compte de ce qui suit jusque ....

					<li>
<a href="#URL_RUBRIQUE"[ class="(#EXPOSE)"]>[(#TITRE|couper{80})]</a>
<BOUCLE_re(BOUCLE_sous_rubriques)></BOUCLE_re>	</li>

				**</B_test_expose>   ... Là**

</BOUCLE_sous_rubriques>
			</ul>
			</B_sous_rubriques>

		</li>
	</BOUCLE_rubriques>

	</ul>
</div>
</B_rubriques>

Petit rappel sur la syntaxe complète d'une boucle :

``

Grand merci à Eric pour ses réponses pédagogiques (c'est toujours mieux d'apprendre à comprendre que de faire bêtement du copier coller...)

Mais voici quand même ma boucle terminée pour ceux que ça pourrait aider . A noter : Je l'ai insérée dans un fichier inc, auquel je fais appel par <INCLURE{fond=inc-menu}{id_article}> pour le squelette des articles et par <INCLURE{fond=inc-menu}{id_rubrique}> pour les rubriques. (C'est important, car sinon, #EXPOSE ne fonctionne pas)

<div id="nav1">
  <B_rub_nav1>
  <BOUCLE_rub_nav1 (RUBRIQUES) {racine}{1/2}>
    <p class="nav_id_rubrique">[(#LOGO_RUBRIQUE|left|#URL_RUBRIQUE)] <a href="#URL_RUBRIQUE" [class=(#EXPOSE)]>#TITRE</a> <br />
    
      <B_art_nav1>
      <BOUCLE_art_nav1 (ARTICLES) {id_rubrique}>
      
        <B_test_expo1>
        <BOUCLE_test_expo1 (ARTICLES) {id_rubrique}>#EXPOSE{' '}</BOUCLE_test_expo1>
      <a href="#URL_ARTICLE" class="nav_id_article"> <img src="bouton.gif"/></a>
      <a href="#URL_ARTICLE" [class=(#EXPOSE)]>#TITRE</a> <br />
        </B_test_expo1>
      
      </BOUCLE_art_nav1>
      </B_art_nav1>
    </p>
  </BOUCLE_rub_nav1>
  </B_rub_nav1>
</div>

Bon week end à tous. N'oubliez pas d'aller voter !
Et avant d'aller voter, vous pouvez aller voir ce que disent nos candidats sur le logiciel libre et des sujets "afférents" sur http://www.candidats.fr/index.php/Actualites

Eric Lurand a écrit :

Si j'ai bien lu le manuel des balises, la balise #EXPOSE me semble servir à faire ressortir graphiquement (taille, graisse, etc) la rubrique ou l'article en cours.
  
C'est vrai. Plus précisément, spip remplace #EXPOSE par 'on' si l’objet correspond au contexte.
Donc pour un lien pointant vers un article par exemple et écrit de cette manière :
<a href="#URL_ARTICLE" [class="(#EXPOSE)"]>
- si l'article n'est pas dans le contexte, #EXPOSE est vide et la class ne sera pas prise en compte.
- si l'article est dans le contexte, #EXPOSE est on et le lien aura la classe "on", définie par la dist dans spip_style.css comme .on { font-weight: bold; color: #000; } /* liens exposes */ (ligne 102).
Tu peux donc en changer l'aspect graphique à ta guise.

Or mon but est plutôt de supprimer du menu les articles dépendant des
autres rubriques que celle dont dépend l'article affiché.
  
J'avais bien compris. Tu peux aussi utiliser #EXPOSE pour faire un test sur ta boucle pour savoir si elle doit s'exécuter ou pas.
C'est ce que fait le squelette de la dist inc-rubriques.html :

<B_rubriques>
<div class="rubriques">
  <h2 class="menu-titre"><:rubriques:></h2>
  <ul>
  <BOUCLE_rubriques(RUBRIQUES) {racine} {par num titre, titre}>
    <li>
      <a href="#URL_RUBRIQUE"[ class="(#EXPOSE)"]>[(#TITRE|couper{80})]</a>

      <B_sous_rubriques>
      <ul>
        <BOUCLE_sous_rubriques(RUBRIQUES) {id_parent} {par num titre, titre}>

*
<BOUCLE_test_expose(RUBRIQUES) {id_enfant}>#EXPOSE{' '}</BOUCLE_test_expose>*
Cette boucle test #EXPOSE :
- si #EXPOSE n'est pas vide (donc sur on) elle continue comme si de rien n'était.
- si #EXPOSE est vide elle ne tiens pas compte de ce qui suit jusque ....

          <li>
<a href="#URL_RUBRIQUE"[ class="(#EXPOSE)"]>[(#TITRE|couper{80})]</a>
<BOUCLE_re(BOUCLE_sous_rubriques)></BOUCLE_re> </li>

        *</B_test_expose> ... Là*

</BOUCLE_sous_rubriques>
      </ul>
      </B_sous_rubriques>

    </li>
  </BOUCLE_rubriques>

  </ul>
</div>
</B_rubriques>

Petit rappel sur la syntaxe complète d'une boucle :
La syntaxe des boucles - SPIP

*<B*/n/*>*

* Code HTML optionnel avant

*<BOUCLE*/n/(TYPE){critère1}{critère2}...{critèrex}*>*

* Code HTML + balises SPIP

*</BOUCLE*/n/*>*

* Code HTML optionnel après

*</B*/n/*>*

* Code HTML alternatif

*<//B*/n/*>

*

**

*