Menu principal en haut et sous-menu dans la sidebar

Bonjour, en ce début d'année j'ai envie de partager une modification que j'ai faite sur PluXml et qui me parait utile pour d'autres utilisateurs.
Qui sait, cela peut donner des idées et peut-être que ça deviendra une option "officielle" dans la configuration ?

Voici l'idée: dans le menu principal (au-dessus) on reprend des entrées qui sont une porte d'entrée vers un type d'information ou un domaine, ce qui dirige vers une page statique qui donne un aperçu du domaine concerné. Les pages liées à ce domaine (qui sont aussi des pages statiques) sont reprises sous forme de sous-menu dans la sidebar.

Ce qui veut dire qu'on ne veut pas afficher les sous-menus au-dessus, mais seulement "activer" le menu en cours.
Par contre, dans la sidebar on doit afficher toutes les pages statiques sous forme de menu en fonction du domaine sélectionné.

1) dans l'admin : il faut créer les pages statiques représentant un domaine, celui-ci étant identifié par le Groupe, les activer et marquer "Afficher" dans le menu
2) dans l'admin : il faut créer les pages statiques liées au domaine en renseignant le même Groupe (=domaine), les activer et marquer "Masquer" dans le menu
3) faire en sorte d'activer le menu quand on est sur une page statique du domaine associé. Cela passe par une modification du code PHP dans la méthode staticList du fichier class.plx.show.php

il faut remplacer la ligne 1301:
[== PHP ==]
$stat = str_replace('#static_status',(($home===false AND $this->staticId()==intval($k))?'static active':'noactive'), $stat);

par le bloc suivant:
[== PHP ==]
if($home AND $k==1) {
  $stat = str_replace('#static_status','active',$stat);
} else {
  if (preg_match('/^(categorie|article)/', $_SERVER['QUERY_STRING'])) {
    $stat = str_replace('#static_status','noactive',$stat);
  } else {
    #Do not activate the sub menu as it is shown in side panel, only activate the main menu (group)
    $stat = str_replace('#static_status',(($home===false AND ($this->staticId()==intval($k) || ( $v['group'] == $this->plxMotor->aStats[$this->plxMotor->cible]['group'] AND !empty($v['group']))))?'static active':'noactive'), $stat);
  }
}

4) il reste à afficher la liste des pages statiques associées au domaine en cours dans la sidebar. Ceci se fait sur base du Groupe associé à la page en cours, et celui-ci est le même que l'on soit sur la page d'introduction du domaine (menu) ou sur une des pages liées. Personnellement j'utilise dans mon thème un fichier sidebar séparé pour les pages statiques dont je sais qu'elles font partie d'un domaine. Dans un des blocs de la sidebar j'ai repris le code suivant à partir d'un exemple d'un autre thème (désolé j'ai oublié lequel):
[== PHP ==]
<?php // astuce statics classées par groupe !!!
// étape 1: groupage des statics dans chaque groupe
if($plxShow->plxMotor->aStats) { // s'il y a des pages statics
	$menu_groupe = array(); // création du tableau des groupes
	foreach($plxShow->plxMotor->aStats as $k=>$v) { // on boucle sur la liste des statics
		if($v['active'] == 1 AND $v['menu'] == 'non' AND $v['group'] == $plxShow->plxMotor->aStats[$plxShow->plxMotor->cible]['group']) { // si la page est active, affichée et appartenant au groupe indiqué
			$menu_groupe[$v['group']][$k] = $v; // on rajoute une entrée pour chaque page static dans chaque groupe
		}else{}
	}
 
	// étape 2: affichage du menu
	
	foreach($menu_groupe as $k=>$v){ // on boucle sur les groupes
		foreach($menu_groupe[$k] as $i=>$j){ // on boucle sur chaque page static du groupe
			$url = $plxShow->plxMotor->urlRewrite('?static'.intval($i).'/'.$menu_groupe[$k][$i]['url']); // formatage de l'url
			// gestion du status
			if($plxShow->staticId()){ // si nous sommes sur une page static
				$idStat = $plxShow->staticId(); // on récupère l'identifiant de la static active
				// on compare cet identifiant avec celui du menu
				if($idStat==intval($i)){ // s'il est égale à celui du menu, le status est actif
					$status = "active";
				} else {
					$status = "no-active";
				}
			}else{
				$status = "no-active";
			}
			echo "<li><a href=\"".$url."\" title=\"".plxUtils::strCheck($menu_groupe[$k][$i]['meta_description'])."\" class=\"".$status."\">".plxUtils::strCheck($menu_groupe[$k][$i]['name'])."</a></li>\n"; // création du lien vers la static
		} // fin de la boucle des statics
	} // fin de la boucle des groupes
}else{} // magique ! ^^^
?>

Pour voir le résultat www.ffe.be

Merci de partager vos remarques / suggestions...

Réponses

  • Sur le même site on a une autre modification, c'est la séparation de la page blog en deux : une partie des articles doit être vue dans la page Agenda, et le reste dans la page News (qui est en fait Blog). Ceci est fait avec include et exclude dans le fichier header de mon thème, la catégorie 004 correspondant à Agenda.
    [== PHP ==]
    <div id="nav">
    	<ul class="menubar">
    		<?php $plxShow->staticList('','<li id="#static_id" class="#static_status"><a href="#static_url" title="#static_name">#static_name</a></li>'); ?>
    		<?php $plxShow->catList('','<li id="#cat_id" class="#cat_status"><a href="#cat_url" title="#cat_name">#cat_name</a></li>',$include='004'); ?>
    		<?php $plxShow->pageBlog('<li id="#page_id" class="#page_status"><a href="#page_url" title="#page_name">#page_name</a></li>',$exclude='004'); ?>
    	</ul>
    	<a id="feed" href="<?php $plxShow->urlRewrite('feed.php?atom') ?>" title="Fil Atom des articles">Fil des Articles</a>
    </div>
    
    

    Malheureusement il semble que le exclude ne fonctionne pas, mais là je n'ai pas osé toucher moi-même le moteur :-)
Connectez-vous ou Inscrivez-vous pour répondre.