Étendre le "pas dans le menu" de Multiflex pour SPIP

Le squelette Multiflex pour SPIP, c'est quoi ?

Le squelette Multiflex pour SPIP est un ensemble de squelettes paramétrable et modulable. Ce n'est pas installé de base. En effet, c'est un module complémentaire (ou plug-in en anglais).

Comment enlever du menu avec Multiflex ?

Pour enlever du menu avec Multiflex, il faut aller sur la page d'édition de ce qu'on veut ne plus voir. Ensuite, il faut lui donner le mot-clé Pas_dans_le_menu appartenant au groupe squelette_habillage. Et c'est tout ! Il faut toutefois que la page soit re-générée pour que le changement soit appliqué, ce que l'on peut forcer avec Recalculer la page ou en vidant le cache de SPIP.

Techniquement il n'est pas compliqué de constater d'où vient cette fonctionnalité, à condition toutefois de s'y connaitre un peu en informatique au-delà des interfaces graphiques. En effet, une bonne commande textuelle fait l'affaire : grep -r Pas_dans_le_menu dossier-racine-du-site. Cela retourne 2 fichiers avec SPIP 3.2 et Multiflex 0.4 : squelettes/inc-colonne.html et plugins/auto/squelette_multiflex/vX.Y.Z/noisettes/_entete/menu_deroulant.html.

Comment étendre le "pas dans le menu" de Multiflex pour SPIP ?

On peut juger qu'est trop restreint l'application par défaut de ce paramètre. plugins/auto/squelette_multiflex/v0.4.3/noisettes/_navigation/vertical/rubriques_soeurs_et_enfants_exposes.html a ce qui suit comme contenu :

[(#REM)
	Options:
	- id_rubrique :		id rubrique dans lequel seront prises les sous rubriques
]
#SET{id_rubrique,0}
<BOUCLE_1(RUBRIQUES){id_rubrique}>[(#SET{id_rubrique, #ID_RUBRIQUE|sinon{0}})]</BOUCLE_1>
<BOUCLE_2(ARTICLES){id_article}>[(#SET{id_rubrique, #ID_RUBRIQUE})]</BOUCLE_2>
<BOUCLE_3(BREVES){id_breve}>[(#SET{id_rubrique, #ID_RUBRIQUE})]</BOUCLE_3>
<//B_2>
<//B_1>

<B_rubrique>
<dl class="nav3-#CONFIG{multiflex/navigation/apparence,grid}">
<BOUCLE_rubrique(RUBRIQUES){id_rubrique=#GET{id_rubrique}}>
	<BOUCLE_rubriques_soeur(RUBRIQUES){meme_parent}{par num titre, titre}>
	  <dt><a href="#URL_RUBRIQUE">#TITRE</a></dt>
	  <BOUCLE_sous_rubriques_soeur(RUBRIQUES){id_parent}{id_parent=#GET{id_rubrique}}{par num titre, titre}>
		<dd><a href="#URL_RUBRIQUE">#TITRE</a></dd>
	  </BOUCLE_sous_rubriques_soeur>
	</BOUCLE_rubriques_soeur>
</BOUCLE_rubrique>
</dl>
</B_rubrique>
[(#REM) Boucler sur racine ]
<B_rubrique_racine>
<dl class="nav3-#CONFIG{multiflex/navigation/apparence,grid}">
<BOUCLE_rubrique_racine(RUBRIQUES){racine}{par num titre, titre}>
	<dt><a href="#URL_RUBRIQUE">#TITRE</a></dt>
	<BOUCLE_sous_rubriques_racine(RUBRIQUES){id_parent}{par num titre, titre}>
		<dd><a href="#URL_RUBRIQUE">#TITRE</a></dd>
	</BOUCLE_sous_rubriques_racine>
</BOUCLE_rubrique_racine>
</dl>
</B_rubrique_racine>
<//B_rubrique>

Si l'on veut vouloir cacher plus de choses affichées à travers ce fichiers, c'est parfaitement possible. Pour cela, on propose de le surcharger avec squelettes/noisettes/_navigation/vertical/rubriques_soeurs_et_enfants_exposes.html. Pour ce qui est de son contenu, voila ce qu'on propose :

[(#REM)
	Options:
	- id_rubrique :		id rubrique dans lequel seront prises les sous rubriques
]
#SET{id_rubrique,0}
<BOUCLE_1(RUBRIQUES){id_rubrique}>[(#SET{id_rubrique, #ID_RUBRIQUE|sinon{0}})]</BOUCLE_1>
<BOUCLE_2(ARTICLES){id_article}>[(#SET{id_rubrique, #ID_RUBRIQUE})]</BOUCLE_2>
<BOUCLE_3(BREVES){id_breve}>[(#SET{id_rubrique, #ID_RUBRIQUE})]</BOUCLE_3>
<//B_2>
<//B_1>

<B_rubrique>
<dl class="nav3-#CONFIG{multiflex/navigation/apparence,grid}">
<BOUCLE_rubrique(RUBRIQUES){id_rubrique=#GET{id_rubrique}}>
	<BOUCLE_rubriques_soeur(RUBRIQUES){meme_parent}{par num titre, titre}>
	  <dt><a href="#URL_RUBRIQUE">#TITRE</a></dt>
	  <BOUCLE_sous_rubriques_soeur(RUBRIQUES){id_parent}{id_parent=#GET{id_rubrique}}{par num titre, titre}>
		<dd><a href="#URL_RUBRIQUE">#TITRE</a></dd>
	  </BOUCLE_sous_rubriques_soeur>
	</BOUCLE_rubriques_soeur>
</BOUCLE_rubrique>
</dl>
</B_rubrique>
[(#REM) Boucler sur racine ]
<B_rubrique_racine>
<dl class="nav3-#CONFIG{multiflex/navigation/apparence,grid}">
<BOUCLE_rubrique_racine(RUBRIQUES){racine}{!titre_mot=(#ENV{mfx_exclure_rubrique_titre_mot})}{par num titre, titre}>
	<dt><a href="#URL_RUBRIQUE">#TITRE</a></dt>
	<BOUCLE_sous_rubriques_racine(RUBRIQUES){id_parent}{!titre_mot=(#ENV{mfx_exclure_rubrique_titre_mot})}{par num titre, titre}>
		<dd><a href="#URL_RUBRIQUE">#TITRE</a></dd>
	</BOUCLE_sous_rubriques_racine>
</BOUCLE_rubrique_racine>
</dl>
</B_rubrique_racine>
<//B_rubrique>

Pourquoi surcharger au lieu de remplacer ?

Cela peut paraitre idiot de s'embêter à mettre un nouveau modèle HTML à un autre endroit, alors qu'on pourrait remplacer le fichier. Pourtant c'est tout à fait pertinent. En effet, quand SPIP se met à jour, tout comme ses modules complémentaires (ou plugins en anglais), il est attendu que les fichiers n'aient pas été modifiés et donc l'ancienne version est remplacée la nouvelle. Avec un remplacement du fichier au lieu d'un surchargage, une mise-à-jour peut donc supprimer les précieuses personnalisations. Il est donc hautement recommandé de surcharger.