Navigator template werkt niet meer met php8.1

Nederlandse ondersteuning voor CMS Made Simple

Moderators: velden, Rolf

Post Reply
(M)
Forum Members
Forum Members
Posts: 112
Joined: Tue Mar 18, 2008 11:43 pm

Navigator template werkt niet meer met php8.1

Post by (M) »

Ik gebruik een navigator template die na het omzetten van php7.4 naar php8.1 niet meer werkt.

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}
Bij het aanmaken van een nieuwe navigator template werkt het menu op de website wel, maar het lukt mij niet om het "dropdown-menu" van Bootstrap werken te krijgen omdat <ul class="navbar-nav mr-auto"> steeds weer opnieuw getoond wordt als er subpagina zijn in het menu.
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}
Ik loop vast bij de sectionheader...

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.
User avatar
velden
Dev Team Member
Dev Team Member
Posts: 3417
Joined: Mon Nov 28, 2011 9:29 am
Location: The Netherlands

Re: Navigator template werkt niet meer met php8.1

Post by velden »

Code: Select all

{function name=Nav_menu depth=1}{strip}
<ul class="navbar-nav mr-auto">
{foreach $data as $node}
Ik denk dat je daar ook een conditie wilt inbouwen:

Code: Select all

{function name=Nav_menu depth=1}{strip}
<ul{if $depth==0} class="navbar-nav mr-auto"{/if}>
{foreach $data as $node}
(M)
Forum Members
Forum Members
Posts: 112
Joined: Tue Mar 18, 2008 11:43 pm

Re: Navigator template werkt niet meer met php8.1

Post by (M) »

Dank je voor de snelle reactie.

Door jouw stukje code aan te passen in het volgende werkt het al deels.

Code: Select all

<ul{if $depth==0} class="navbar-nav mr-auto"{/if} class="dropdown-menu">
Ik krijg het niet voor elkaar om het volgende: role="button" data-toggle="dropdown" aria-expanded="false" toe te voegen in de template, om onderstaande Bootstrap voorbeeld code te krijgen. Data-toggle is nodig om het het sub-menu te open na een klik.

Code: Select all

<li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-expanded="false">
          Dropdown
        </a>
        <div class="dropdown-menu">
          <a class="dropdown-item" href="#">Action</a>
          <a class="dropdown-item" href="#">Another action</a>
          <div class="dropdown-divider"></div>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </li>
User avatar
velden
Dev Team Member
Dev Team Member
Posts: 3417
Joined: Mon Nov 28, 2011 9:29 am
Location: The Netherlands

Re: Navigator template werkt niet meer met php8.1

Post by velden »

Hoe is het probleem ontstaan eigenlijk?

Je wilt PHP versie 8.1 gaan gebruiken en werd daarom gedwongen om over te stappen van Menu Manager naar Navigator?
Of werkte je al met Navigator en werkt het nu niet meer door de upgrade naar versie 8.1?

Ik begrijp namelijk niet hoe je ooit met een menu van <div>...</div> hebt gewerkt als dat in het oorspronklijke template niet voorkomt.
(M)
Forum Members
Forum Members
Posts: 112
Joined: Tue Mar 18, 2008 11:43 pm

Re: Navigator template werkt niet meer met php8.1

Post by (M) »

Het probleem is ontstaan bij het omzetten naar php8.1. De oorspronkelijke template had al de Navigator structuur.

Sorry voor de verwarring, maar de <div>...</div> is van de voorbeeld code van de Bootstrap website.
Ik gebruik in de Navigator template <ul>...</ul>. Dat werkt ook.
(M)
Forum Members
Forum Members
Posts: 112
Joined: Tue Mar 18, 2008 11:43 pm

Re: Navigator template werkt niet meer met php8.1

Post by (M) »

Ik kom er nu achter dat de oorspronkelijke menu template met een kleine aanpassing wel werkt als php8.1 actief is. Maar dat is op een andere website waar met bootstrap 3 actief is ipv Bootstrap 4. In de toekomst zal ik dus wel een vergelijkbaar probleem hebben omdat die website ook omgezet zal worden naar bootstrap 4 of 5

hier heb ik 'menu-item' toegevoegd;

Code: Select all

  {if $node->has_children}
    {* this is a parent page *}
    {$liclass[]='menu-item dropdown'}
    {$aclass[]='dropdown-toggle'}
  {/if}
Het cms moet wel bijgewerkt worden naar 2.2.16 anders werkt zelfs de admin niet met php8.1
(M)
Forum Members
Forum Members
Posts: 112
Joined: Tue Mar 18, 2008 11:43 pm

Re: Navigator template werkt niet meer met php8.1

Post by (M) »

Ik het dropdown menu werkt via de navigator template "simple navigation".

Ik had aan onderstaande regel "dropdown-menu" toegevoegd waardoor de sectionheader niet meer functioneerde.

Code: Select all

{if $node->type == 'sectionheader dropdown-menu'}
Het duurde even voor ik dat in de gaten had...
Post Reply

Return to “Dutch - Nederlands”