Page 1 of 1

Menumanager vind child van active parent

Posted: Fri Sep 30, 2016 2:31 pm
by timdebuurman
Hoi,

In de menumanager heb ik het nodig om te bepalen of een sub-item een 'child' is van een actieve 'parent'.

Die optie zit er standaard niet in zo te zien en ik vraag me af hoe ik dit toch kan bepalen.

Dit omdat ik het submenu anders wil maken zodra ik op een actieve pagina ben.

Hopelijk leg ik het goed genoeg uit zo...

gr Tim

Re: Menumanager vind child van active parent

Posted: Sat Oct 01, 2016 9:52 am
by Rolf
Je zou dit met een Smarty vergelijking in het menu template prima kunnen maken.
Heb even geen tijd om het te proberen...

Re: Menumanager vind child van active parent

Posted: Sat Oct 01, 2016 10:34 am
by timdebuurman
Misschien mis ik dan net de (smarty-)kennis om dat voor elkaar te krijgen.

Het zou fijn zijn als je hier later nog naar wilt kijken.

Re: Menumanager vind child van active parent

Posted: Sat Oct 01, 2016 11:43 am
by Rolf
Voer voor een nieuwe tutorial lijkt me :)

Re: Menumanager vind child van active parent

Posted: Sun Oct 02, 2016 1:23 pm
by velden
Als voorbeeld het Simple Navigation navigator template:

Code: Select all

{function name=Nav_menu depth=1}{strip}
<ul>
  {foreach $data as $node}
{if $activeparent}<!-- ACTIVEPARENT -->{/if} {* <-- deze regel toevoegen als test *}
    {* setup classes for the anchor and list item *}
...

{if isset($node->children)}
          {Nav_menu data=$node->children depth=$depth+1 activeparent=$node->current} {* voeg de activeparent parameter toe*}
        {/if}
    ...
        {if isset($node->children)}
          {Nav_menu data=$node->children depth=$depth+1 activeparent=$node->current} {* voeg de activeparent parameter toe*}
        {/if}

Merk op dat dit maar één level diep doorwerkt. Dus enkel de directe childs van de actieve node. Als je het dieper wilt (dus ook weer children van de children) dan moet je het een klein beetje aanpassen.

Re: Menumanager vind child van active parent

Posted: Mon Oct 03, 2016 1:38 pm
by timdebuurman
Bedankt voor het meedenken.
Ik zit in dit geval nog op een 1.12.2 versie (vanwege het nog niet compatible zijn van enkele nodige modules)

Hierbij ziet de standaard (simple navigation) er zo uit:

Code: Select all

{* CSS classes used in this template:
.activeparent - The top level parent when a child is the active/current page
li.active0n h3 - n is the depth/level of the node. To style the active page for each level separately. The active page is not clickable.
.clearfix - Used for the unclickable h3 to use the entire width of the li, just like the anchors. See the Tools stylesheet in the default CMSMS installation.
li.sectionheader h3 - To style section header
li.separator - To style the ruler for the separator *} 

{assign var='number_of_levels' value=10000}
{if isset($menuparams.number_of_levels)}
  {assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}

{if $count > 0}
<ul>
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}</li>
{/if}

{if $node->parent == true or $node->current == true}
  {assign var='classes' value='menuactive'}
  {if $node->parent == true}
    {assign var='classes' value='menuactive menuparent'}
  {/if}
  {if $node->children_exist == true and $node->depth < $number_of_levels}
    {assign var='classes' value=$classes|cat:' parent'}
  {/if}
  <li class="{$classes}"><a class="{$classes}" href="{$node->url}"><span>{$node->menutext}</span></a>

{elseif $node->children_exist == true and $node->depth < $number_of_levels and $node->type != 'sectionheader' and $node->type != 'separator'}
<li class="parent"><a class="parent" href="{$node->url}"><span>{$node->menutext}</span></a>

{elseif $node->current == true}
<li class="currentpage"><h3><span>{$node->menutext}</span></h3>

{elseif $node->type == 'sectionheader'}
<li class="sectionheader"><span>{$node->menutext}</span>

{elseif $node->type == 'separator'}
<li class="separator" style="list-style-type: none;"> <hr />

{else}
<li><a href="{$node->url}"><span>{$node->menutext}</span></a>

{/if}

{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}
Zou je daarin kunnen laten zien hoe de 'child' van de 'active parent' bepaald kan worden?

Re: Menumanager vind child van active parent

Posted: Mon Oct 03, 2016 2:28 pm
by velden
Waarschijnlijk wel met veel werk.

Er is een reden dat er voor de nieuwe Navigator is gekozen, en zoals je ziet maakt die dergelijke zaken veel eenvoudiger.

Re: Menumanager vind child van active parent

Posted: Wed Oct 05, 2016 10:06 am
by timdebuurman
Oke, bedankt voor het meedenken.
Ik heb het voor nu op kunnen lossen met Javascript, die de href van een submenu item aanpast als de parent een active klasse heeft.

Niet de mooiste oplossing, maar het werkt voor nu.