Dit is de bestaande code
Code: Select all
{* Main Navigation Bootstrap 4 style *}
{if !isset($depth)}{$depth=0}{/if}
{strip}
{if $depth == 0}
<ul class="navbar-nav mr-auto">
<!-- Hidden li included to remove active class from about link when scrolled up past about section -->
<li class="hidden">
<a href="#page-top"></a>
</li>
{else}
<ul class="dropdown-menu">
{/if}
{$depth=$depth+1}
{foreach $nodes as $node}
{* setup classes for the anchor and list item *}
{$liclass=[nav-item]}
{$aclass=[nav-link]}
{* the first child gets a special class *}
{if $node@first && $node@total > 1}{$liclass[]='first_child'}{/if}
{* the last child gets a special class *}
{if $node@last && $node@total > 1}{$liclass[]='last_child'}{/if}
{if $node->current}
{* this is the current page *}
{$liclass[]='active'}
{$aclass[]='active'}
{/if}
{if $node->has_children}
{* this is a parent page *}
{$liclass[]='dropdown'}
{$aclass[]='dropdown-toggle'}
{/if}
{if $node->parent}
{* this is a parent of the current page *}
{$liclass[]='menuactive'}
{$aclass[]='menuactive'}
{/if}
{* build the menu item from the node *}
{if $node->type == 'sectionheader'}
<li class='nav-item {implode(' ',$liclass)}'>
<a{if count($aclass) > 0} class="nav-link {implode(' ',$aclass)}"{/if} data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{$node->menutext}</a>
{if isset($node->children)}
{include file=$smarty.template nodes=$node->children}
{/if}
</li>
{else if $node->type == 'separator'}
<li style="list-style-type: none;"><hr class="menu_separator"/></li>
{else}
{* regular item *}
<li class="nav-item {implode(' ',$liclass)}">
<a{if count($aclass) > 0} class="nav-link {implode(' ',$aclass)}"{/if} href="{$node->url}"{if $node->target ne ""} target="{$node->target}"{/if}><span>{$node->menutext}</span></a>
{if isset($node->children)}
{include file=$smarty.template nodes=$node->children}
{/if}
</li>
{/if}
{/foreach}
{$depth=$depth-1}
</ul>
{if $depth == 0}
{/if}
{/strip}
In bovenstaande code wordt via een if/else <ul class="dropdown-menu"> gezet. In de nieuwe navigator template structuur krijg ik dat niet voor elkaar.
Dit is de nieuwe code
Code: Select all
{* simple navigation werkt met php8.1 Bootstrap 4 style *}
{* note, function can only be defined once *}
{*
variables:
node: contains the current node.
aclass: is used to build a string containing class names given to the a tag if one is used
liclass: is used to build a string containing class names given to the li tag.
*}
{function name=Nav_menu depth=1}{strip}
<ul class="navbar-nav mr-auto">
{foreach $data as $node}
{* setup classes for the anchor and list item *}
{assign var='liclass' value='menudepth'|cat:$depth}
{assign var='aclass' value=''}
{* the first child gets a special class *}
{if $node@first && $node@total > 1}{assign var='liclass' value=$liclass|cat:' first_child'}{/if}
{* the last child gets a special class *}
{if $node@last && $node@total > 1}{assign var='liclass' value=$liclass|cat:' last_child'}{/if}
{if $node->current}
{* this is the current page *}
{assign var='liclass' value=$liclass|cat:' menuactive'}
{assign var='aclass' value=$aclass|cat:' menuactive'}
{/if}
{if $node->parent}
{* this is a parent of the current page *}
{assign var='liclass' value=$liclass|cat:' menuactive menuparent'}
{assign var='aclass' value=$aclass|cat:' menuactive menuparent'}
{/if}
{if $node->children_exist}
{assign var='liclass' value=$liclass|cat:' dropdown'}
{assign var='aclass' value=$aclass|cat:' dropdown-toggle'}
{/if}
{* build the menu item node *}
{if $node->type == 'sectionheader dropdown-menu'}
<li class='nav-item sectionheader {$liclass}'><span>{$node->menutext}</span>
{if isset($node->children)}
{Nav_menu data=$node->children depth=$depth+1}
{/if}
</li>
{else if $node->type == 'separator'}
<li class='separator {$liclass}'><hr class='menu_separator separator'/></li>
{else}
{* regular item *}
<li class="nav-item {$liclass}">
<a class="nav-link {$aclass}" href="{$node->url}"{if $node->target ne ""} target="{$node->target}"{/if}><span>{$node->menutext}</span></a>
{if isset($node->children)}
{Nav_menu data=$node->children depth=$depth+1}
{/if}
</li>
{/if}
{/foreach}
</ul>
{/strip}{/function}
{if isset($nodes)}
{Nav_menu data=$nodes depth=0}
{/if}
Weet iemand een oplossing om de bestaande code werkend te krijgen in php8.1? Of de nieuwe template code zo aan te passen dat bij een submenu er een andere ul class gezet wordt.