Pluxopolis

Tout savoir pour devenir un pro de PluXml, mais pas seulement...

Afficher le menu d'une catégorie dans la barre des menus des pages statiques

Rédigé par Stéphane 5 commentaires
La barre des menus horizontaux généralement affichée dans la plupart des thèmes de PluXml, correspond à la liste des pages statiques visibles et actives.
Toujours dans un esprit de personnlisation de son thème, il est peut être utile voir intéressant de rajouter dans cette liste de menus, un menu donnant accès au contenu d'une catégorie d'articles. Voyons comment rajouter ce menu et quel code php utiliser.

Le code utilisé pour afficher la liste des pages statiques sous forme de menus est dans le fichier header.php du thème et est identifiable par les lignes suivantes:

<ul>
	<?php $plxShow->staticList($plxShow->getLang('HOME'),'<li id="#static_id"><a href="http://pluxopolis.net/article28/afficher-le-menu-d-une-categorie-dans-la-barre-des-menus-des-pages-statiques#static_url" class="#static_status" title="#static_name">#static_name</a></li>'); ?>
	<?php $plxShow->pageBlog('<li id="#page_id"><a class="#page_status" href="http://pluxopolis.net/article28/afficher-le-menu-d-une-categorie-dans-la-barre-des-menus-des-pages-statiques#page_url" title="#page_name">#page_name</li>'); ?>
</ul>
La ligne avec la fonction staticList permet d'afficher le menu Accueil et la liste des pages statiques, tandis que la fonction pageBlog affiche le lien "Blog" si une page statique a été définie comme page d'accueil du site.

Le bout de code suivant permet d'afficher le menu d'une catégorie en formatant le lien pour l'intégrer dans la liste des pages statiques en tenant compte de la réécriture d'url et de la mise en surbrillance du lien lorsque celui est sélectionné (les classes css .active et .noactive sont utilisées à cet effet).

<?php
$idCat = '001';
if(isset($plxMotor->aCats[$idCat])) {
	if($plxMotor->aCats[$idCat]['menu']=='oui' AND $plxMotor->aCats[$idCat]['active']) {
		$id = 'cat-'.intval($idCat);
		$url = $plxMotor->urlRewrite('?categorie'.intval($idCat).'/'.$plxMotor->aCats[$idCat]['url']);
		$name = plxUtils::strCheck($plxMotor->aCats[$idCat]['name']);
		$active = ($plxShow->catId()==intval($idCat)?'active':'noactive');
		echo '<li id="'.$id.'"><a class="'.$active.'" title="'.$name.'" href="http://pluxopolis.net/'.$url.'">'.$name.'</a></li>';
	}
}
?>
Pour rappel, chaque catégorie est identifiable par un numéro unique sur trois caractères: par exemple 001. Pour connaitre l'identifiant d'une catégorie il suffit d'aller dans la gestion des catégories (menu Catégories) de la zone d'administration. Les numéros sont affichés dans la colonne "Identifiant" du tableau listant toutes les catégories. Pour afficher votre catégorie, modifiez donc la ligne suivante en remplaçant 001 par le numéro de catégorie souhaitée.

$idCat = '001';
Notez que le menu ne sera affiché que si la catégorie est active et que le paramètre de la colonne "Menu" dans la gestion des catégories est réglé sur "Afficher".

Le code est à ajouter dans le fichier header.php stocké dans le dossier de votre thème, de manière à obtenir par exemple les lignes suivantes:

<ul>
	<?php $plxShow->staticList($plxShow->getLang('HOME'),'<li id="#static_id"><a href="http://pluxopolis.net/article28/afficher-le-menu-d-une-categorie-dans-la-barre-des-menus-des-pages-statiques#static_url" class="#static_status" title="#static_name">#static_name</a></li>'); ?>
	<?php
	$idCat = '001';
	if(isset($plxMotor->aCats[$idCat])) {
		if($plxMotor->aCats[$idCat]['menu']=='oui' AND $plxMotor->aCats[$idCat]['active']) {
			$id = 'cat-'.intval($idCat);
			$url = $plxMotor->urlRewrite('?categorie'.intval($idCat).'/'.$plxMotor->aCats[$idCat]['url']);
			$name = plxUtils::strCheck($plxMotor->aCats[$idCat]['name']);
			$active = ($plxShow->catId()==intval($idCat)?'active':'noactive');
			echo '<li id="'.$id.'"><a class="'.$active.'" title="'.$name.'" href="http://pluxopolis.net/'.$url.'">'.$name.'</a></li>';
		}
	}
	?>
	<?php $plxShow->pageBlog('<li id="#page_id"><a class="#page_status" href="http://pluxopolis.net/article28/afficher-le-menu-d-une-categorie-dans-la-barre-des-menus-des-pages-statiques#page_url" title="#page_name">#page_name</li>'); ?>
</ul>

5 commentaires

#1  - jerrywham a dit :

Enfin une solution propre de ce qui manquait au menu de Pluxml. Merci.

Pourquoi ne pas l'intégrer directement en natif ?

Répondre
#2  - cpalo a dit :

Bonjour

J'aurai souhaité que rubrique 1 s'insère entre statique 1 et statique 2.

Je suppose qu'il faut que je supprime le code initial ( staticlist....) permettant d'afficher automatiquement le menu des pages statiques et que je remplace par deux liens du style permettant d'afficher la rubrique.

De même j'utilise le plugin myContact, et il s'affichait en dernier. Mais en fait il s'affiche après la dernière page statique, ce qui fait qu'il n'apparait plus en dernier puisqu'il y a maintenant cette rubrique 1.

Cordialement

Répondre
#3  - Stéphane a dit :

@cpalo :
Bonjour. Effectivement avec la fonction staticList il n'est pas possible d'afficher le menu d'une catégorie. Il faut coder en dur les liens. Du coup sans la fonction staticList il n'est pas possible également d'afficher le menu du plugin myContact. Pareil il faut alors coder en dur les liens dans le fichier du thème.

Répondre
#4  - Tomek a dit :

Bonjour,

J'ai exactement la même demande que Cpalo, et en plus avec un site multilingue.
Je viens de tester en insérant ce code de catégorie au côté du code de même style pour insérer une page statique définie dans le menu, et, je pense que c'est un bug, il y a un souci avec le multillingue : le lien ne s'affiche pas pour la page... En regardant les id, je me suis aperçu que c'étaient les mêmes dans les différentes langues, ça part toujours de 001 (ce qui est assez logique, je pense).

Y a t-il moyen de voir ce qu'il est possible de faire ?
Merci d'avance !

Franck

Répondre
#5  - Tomek a dit :

Ah, je précise, je viens de regarder, il n'y a pas d'erreur dans les logs php.
Et côté rendu, seul l'intitulé du lien manque (entre les balises <a></a>), tout le reste est ok, donc ça doit pas être ce que je supposais dans le précédent commentaire, ahah...

Répondre

Fil RSS des commentaires de cet article

Écrire un commentaire

Quelle est la deuxième lettre du mot nbaf ?
Top