Олег Васильевич я, меню из первой ветки необходимо преобразить :)
Странник, неправильного поведения нет😊Есть, с моей стороны, непонимание при адаптации меню из списка в блочный вид. В указанном фреймворке в меню ничего лишнего в стили не подставляется, о фреймворке можно было вовсе не упоминать, он никоим образом не влияет на процесс, будь он обычный html-код с применением нескольких стилей. Не могу разобраться именно в структуре выпадающего меню: в дефолтной структуре пункт содержит в себе выпадающее меню, в то время, как в блочном меню все пункты в виде ссылок, а пункт выпадающего — div с ссылками. Заранее простите за "многотекста", но на скриншотах выйдет гораздо больше и менее информативнее.
Общий вид дефолтного меню
<ul id="{$menu}" class="menu">
{if $cfg.show_home}
<li {if $menuid==1}class="selected"{/if}>
<a href="/" {if $menuid==1}class="selected"{/if}><span>{$LANG.PATH_HOME}</span></a>
</li>
{/if}
{foreach key=key item=item from=$items}
{if $item.NSLevel == $last_level}</li>{/if}
{$tail=$last_level-$item.NSLevel}
{section name=foo start=0 loop=$tail step=1}
</li></ul></li>
{/section}
{if $item.NSLevel > 1 && $item.NSLevel > $last_level}<ul>{/if}
<li class="{$item.css_class} {if ($menuid==$item.id || $current_uri == $item.link) || ($currentmenu.NSLeft > $item.NSLeft && $currentmenu.NSRight < $item.NSRight)}selected{/if}">
<a href="{$item.link}" target="{$item.target}" {if ($menuid==$item.id || $current_uri == $item.link)}class="selected"{/if} title="{$item.title|escape:'html'}">
<span>
{if $item.iconurl}<img src="/images/menuicons/{$item.iconurl}" alt="{$item.title|escape:'html'}" />{/if}
{$item.title}
</span>
</a>
{$last_level=$item.NSLevel}
{/foreach}
{section name=foo start=0 loop=$last_level step=1}
</li>
{/section}
</ul>
Для наглядности убрал пробелы. Обертка
<div class="menu">… </div> прописана в шаблоне, поэтому из него мне понадобится только часть отвечающая за сами пункты меню, а именно
foreach. Убрал из меню всё лишнее (span, вывод иконок, классы прописываемые через ПУ, классы активного пункта меню). То есть оставил "голое" меню, саму его структуру не изменял.
{foreach key=key item=item from=$items}
{if $item.NSLevel == $last_level}
</li>
{/if}
{$tail=$last_level-$item.NSLevel}
{section name=foo start=0 loop=$tail step=1}
</li></ul></li>
{/section}
{if $item.NSLevel > 1 && $item.NSLevel > $last_level}<ul>{/if}
<li>
<a href="{$item.link}">
{$item.title}
</a>
{$last_level=$item.NSLevel}
{/foreach}
{section name=foo start=0 loop=$last_level step=1}
</li>
{/section}
От приведенного выше кода я стал отталкиваться и "лепить" блочное меню. Вот что получилось:
{foreach key=key item=item from=$items}
{if $item.NSLevel == $last_level}
</a>
{/if}
{$tail=$last_level-$item.NSLevel}
{section name=foo start=0 loop=$tail step=1}
</div></div>
{/section}
{if $item.NSLevel > 1 && $item.NSLevel > $last_level}
<div class="ui dropdown item">{$item.title}
<div class="menu">
{else}
<a class="item" href="{$item.link}">
{$item.title}
</a>
{/if}
{$last_level=$item.NSLevel}
{/foreach}
{section name=foo start=0 loop=$last_level step=1}
</div>
{/section}
И результат
На скриншоте видно, что первый подпукнт стал пунктом.
foreach — отвечает понятно за что.
условие
if $item.NSLevel == $last_level — последний уровень = последний элемент
не ясны вот эти строчки, но с ними вроде разобрался:
{section name=foo start=0 loop=$tail step=1}{/section}
{section name=foo start=0 loop=$last_level step=1}{/section}