Menu BS et active sectionheader sur version 1.9.x -
Yannkee - 30/05/2016
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: !1.11.x
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~ Version du CMS
#~ 1.9.4.2
#~ Modules installés
#~ CMSMailer
#~ 2.0.1
#~ FileManager
#~ 1.1.0
#~ MenuManager
#~ 1.7.6
#~ ModuleManager
#~ 1.4.2
#~ News
#~ 2.11.3
#~ nuSOAP
#~ 1.0.2
#~ Printing
#~ 1.1.2
#~ Search
#~ 1.6.10
#~ ThemeManager
#~ 1.1.4
#~ TinyMCE
#~ 2.8.4
#~ babel
#~ 0.4
#~ Album
#~ 0.9.3
#~ FormBuilder
#~ 0.7
#~ FileBackup
#~ 0.5
#~ MysqlDump
#~ 1.2.4
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour,
Bon alors je sais, ce n'est pas la derniere version de CMSMS mais pour tout un tas de raisons locales il n'est pas a l'ordre du jour de faire un upgrade desole.
Donc ma question est toute simple, j'ai un menu en BS tout bete dont voici l'extrait qui me pose soucis
Code :
[== Indéfini ==]
<ul class='nav navbar-nav navbar-right' role='menu'>
{foreach from=$nodelist item='node'}
{* if depth is greater then previous we need ul *}
{if $node->depth > $node->prevdepth}
{repeat string="<ul class='dropdown-menu' role='menu'>" times=$node->depth-$node->prevdepth}
{* if depth is lower then we have to close unordered list *}
{elseif $node->depth < $node->prevdepth}
{repeat string='</li></ul>' times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}
</li>
{/if}
{* is menu item current? *}
{if $node->current == true}
<li class='active{if $node->parent == true || $node->haschildren == true}{if $node->depth > 1} dropdown-submenu{else} dropdown{/if}{/if}'>
<a href='{$node->url}' {if $node->parent == true || $node->haschildren == true}class='dropdown-toggle {$node->alias}' data-toggle='dropdown' data-target='#'{else}class='{$node->alias}'{/if}{if $node->target != ''} target='{$node->target}'{/if}>{$node->menutext}{if ($node->parent == true || $node->haschildren == true) && ($node->depth < 2)} <b class='caret'></b>{/if}</a>
{* is menu item parent and not sectionheader? *}
{elseif $node->parent == true && ($node->type != 'sectionheader' && $node->type != 'separator')}
<li class='{if $node->parent == true || $node->haschildren == true} active{if $node->depth > 1} dropdown-submenu{else} dropdown{/if}{/if}'>
<a href='{$node->url}' data-toggle='dropdown' data-target='#' class='dropdown-toggle active {$node->alias}'{if $node->target != ''} target='{$node->target}'{/if}>{$node->menutext}{if ($node->parent == true || $node->haschildren == true) && ($node->depth < 2)} <b class='caret'></b>{/if}</a>
{* is menu item a sectionheader? *}
{elseif $node->type == 'sectionheader' && ($node->parent == true || $node->haschildren == true)}
<li class='sectionheader {if $node->depth > 1} dropdown-submenu{else} dropdown{/if}'>
<a href='#' data-toggle='dropdown' class='dropdown-toggle {$node->alias}{if $node->current} active{/if}'>{$node->menutext}{if ($node->parent == true || $node->haschildren == true) && ($node->depth < 2)} <b class='caret'></b>{/if}</a>
{* and sectionheader has no children? *}
{elseif $node->type == 'sectionheader' && $node->haschildren == false}
<li class='sectionheader nav-header'>
{$node->menutext}
{* should a menu item be separated? *}
{elseif $node->type == 'separator'}
<li class='divider'>
{else}
<li{if $node->parent == true || $node->haschildren == true} class='{if $node->depth > 1}dropdown-submenu{else}dropdown{/if}'{/if}>
<a href='{$node->url}' {if $node->parent == true || $node->haschildren == true}class='dropdown {$node->alias}'{else}class='{$node->alias}'{/if}{if $node->target != ''} target='{$node->target}'{/if}>{$node->menutext}{if ($node->parent == true || $node->haschildren == true) && ($node->depth < 2)} <b class='caret'></b>{/if}</a>
{/if}
{/foreach}
{repeat string='</li></ul>' times=$node->depth-1}</li>
</ul>
Mon menu a une structure du type
1 Accueil (contenu page)
2 Rubrique1 (contenu SectionHeader)
2.1 Sous rubrique 1a (contenu page)
2.2 Sous rubrique 1b (contenu page)
3 Rubrique 2 (contenu page)
etc etc
Je voudrais que si je me trouve sur la page 2.1 ou 2.2, la classe du menu [2 Rubrique] (de type SectionHeader) passe en "active" pour pouvoir lui affecter un style specifique. Donc simplement identifier d'une classe la rubrique parente lorsque une des pages children est active.
J'espere etre assez clair.
J'ai eu beau chercher sur G ou sur les forums CMSMS, impossible de trouver une reponse simple que j'aie pu comprendre ou mettre en oeuvre...
Une piste, un exemple, un modele ?
Merci !
Menu BS et active sectionheader sur version 1.9.x -
Jean le Chauve - 30/05/2016
Sans avoir testé, un truc dans le genre :
Code :
{if $node->current == true}
[...]
{* n'est pas current et est le parent sectionheader de l'item actuel *}
{elseif $node->parent == true && $node->type == 'sectionheader'}
<li class='active'>[...]
Menu BS et active sectionheader sur version 1.9.x -
jce76350 - 30/05/2016
Citation :ce n'est pas la derniere version de CMSMS mais pour tout un tas de raisons locales il n'est pas a l'ordre du jour de faire un upgrade
Les mises à jour sont la pour corriger des failles potentielles .... mais c'est ton problème et ta responsabilité.
Menu BS et active sectionheader sur version 1.9.x -
airelibre - 30/05/2016
Teste la valeur de {$node->current} - je crois que sur les parents, elle est à 1 dans ce cas-là
Menu BS et active sectionheader sur version 1.9.x -
Jean le Chauve - 30/05/2016
Non, non, current est false. Il n'y a qu'un seul current == true.
Par contre, il peut y avoir plusieurs parent == true si tu as des <ul> successifs (rubrique->sousrubrique->sousousrubrique...).
Tu places un <pre>{$nodelist|var_dump}</pre> dans ton foreach (menu) et tu vas sur la page sousrubrique 1A. Il te suffit de regarder les valeurs contenues dans l'array ayant "pagetitle" => rubrique1