1

Тема: Как вывести третий уровень меню

http://luchski.ru/ - сейчас на нашем сайте выводится двухуровневое меню

есть шаблон category.tpl - как можно его изменить, чтобы выводить и третий уровень меню?

2 Отредактировано Закусило Александр (03.06.2016 17:00:12)

Re: Как вывести третий уровень меню

Точно также как меню предыдущего уровня. Там же идёт перебор уровней. И на каждом уровне у категории, есть поле child, которое хранит сведения о том есть дети у этой категории или нет.
Вот например вся конструкция для второго уровня:

{if !empty($dir.child)}

<ul {if $columns}class="{$columns}"{/if}>
     {foreach from=$dir.child item=item}
          <li {if in_array($item.fields.id, $pathids)}class="act"{/if} {$item.fields->getDebugAttributes()}><a href="{$item.fields->getUrl()}">{$item.fields.name}</a>
     {/foreach}
</ul>
{/if}

Соответственно Вам нужно переделать, чтобы выводился третий уровень

{if !empty($dir.child)}

<ul>
     {foreach from=$dir.child item=item}
          <li {if in_array($item.fields.id, $pathids)}class="act"{/if} {$item.fields->getDebugAttributes()}><a href="{$item.fields->getUrl()}">{$item.fields.name}</a>
           {if !empty($item.child)}
                 <ul>
                       {foreach from=$item.child item=subitem}
                            <li {if in_array($subitem.fields.id, $pathids)}class="act"{/if} {$subitem.fields->getDebugAttributes()}><a href="{$subitem.fields->getUrl()}">{$subitem.fields.name}</a>
                            </li>
                       {/foreach}
                 </ul>      
           {/if}
           </li>
     {/foreach}
</ul>
{/if}

3

Re: Как вывести третий уровень меню

Третий уровень выводится, но сразу у всех категорий и даже не наводя курсор, т.е. при наведении на категорию 1 уровня, выводится и вторая и все третьи, которые есть. А как сделать, чтобы третий уровень открывался при наведении на второй?

http://s017.radikal.ru/i444/1606/43/bc9edcdb731b.jpg

4 Отредактировано Закусило Александр (06.06.2016 11:46:58)

Re: Как вывести третий уровень меню

Нужно правильно назначить стили CSS. Т.к. сейчас по умолчанию под условия показа подменю подходит и третий уровень, поэтому и показывается. Посмотрите статьи в интернете по созданию выпадающего меню на CSS. Я не буду расписывать Вам эти моменты, т.к. они относятся к базовым знаниям CSS. Вам нужно просто подтянуть знания по этой теме.

5

Re: Как вывести третий уровень меню

Подтянул свои знания css, разобрался :-)

Re: Как вывести третий уровень меню

Ставлю Вам плюс!

7 Отредактировано Сергей (12.12.2017 22:14:31)

Re: Как вывести третий уровень меню

В Классической теме меню состоит из 2-х уровней.
Как нужно изменить шаблон category.tpl, что бы выводился 3-й уровень меню?

{* Список категорий из 2-х уровней*}
{if $dirlist}
    <ul class="category">
        {hook name="catalog-blocks-category-category:list-item" title="{t}Категории товаров:элементы списка{/t}"}
            {foreach from=$dirlist item=dir}
            <li {if in_array($dir.fields.id, $pathids)}class="act"{/if} {$dir.fields->getDebugAttributes()}><a href="{$dir.fields->getUrl()}">{$dir.fields.name}</a>
                {if !empty($dir.child)}
                {assign var=cnt value=count($dir.child)}
                {if $cnt>9 && $cnt<21}
                    {assign var=columns value="twoColumn"}
                {elseif $cnt>20}
                    {assign var=columns value="threeColumn"}
              {/if}
                <ul {if $columns}class="{$columns}"{/if}>
                    <li class="corner"></li>
                    {foreach from=$dir.child item=item}
                    <li {if in_array($item.fields.id, $pathids)}class="act"{/if} {$item.fields->getDebugAttributes()}><a href="{$item.fields->getUrl()}">{$item.fields.name}</a>
                    {/foreach}
                </ul>
                {/if}
            </li>
            {/foreach}
        {/hook}
    </ul>
{else}
    {include file="theme:default/block_stub.tpl"  class="blockCategory" do=[
        [
            'title' => t("Добавьте категории товаров"),
            'href' => {adminUrl do=false mod_controller="catalog-ctrl"}
        ]
    ]}
{/if}

Пробовал как описано выше, не работает.

Повысить оценку Понизить оценку

Re: Как вывести третий уровень меню

Вот так можно.

{* Список категорий из 3-х уровней*}
{if $dirlist}
    <ul class="category">
        {hook name="catalog-blocks-category-category:list-item" title="{t}Категории товаров:элементы списка{/t}"}
        {foreach from=$dirlist item=dir}
            <li {if in_array($dir.fields.id, $pathids)}class="act"{/if} {$dir.fields->getDebugAttributes()}><a href="{$dir.fields->getUrl()}">{$dir.fields.name}</a>
                {if !empty($dir.child)}
                    {assign var=cnt value=count($dir.child)}
                    {if $cnt>9 && $cnt<21}
                        {assign var=columns value="twoColumn"}
                    {elseif $cnt>20}
                        {assign var=columns value="threeColumn"}
                    {/if}
                    <ul {if $columns}class="{$columns}"{/if}>
                        <li class="corner"></li>
                        {foreach from=$dir.child item=item}
                            <li {if in_array($item.fields.id, $pathids)}class="act"{/if} {$item.fields->getDebugAttributes()}>
                                <a href="{$item.fields->getUrl()}">{$item.fields.name}</a>
                                {if !empty($item.child)} {* Третий уровень *}
                                    <ul>
                                        {foreach from=$item.child item=subitem}
                                            <li {if in_array($subitem.fields.id, $pathids)}class="act"{/if} {$subitem.fields->getDebugAttributes()}>
                                                <a href="{$subitem.fields->getUrl()}">{$subitem.fields.name}</a>
                                            </li>
                                        {/foreach}
                                    </ul>
                                {/if}
                            </li>
                        {/foreach}
                    </ul>
                {/if}
            </li>
        {/foreach}
        {/hook}
    </ul>
{else}
    {include file="theme:default/block_stub.tpl"  class="blockCategory" do=[
    [
    'title' => t("Добавьте категории товаров"),
    'href' => {adminUrl do=false mod_controller="catalog-ctrl"}
    ]
    ]}
{/if}

Только не забывайте, что в этой теме стили только для двух уровней. Т.е. Вам надо будет стили прописать самостоятельно для третей, чтобы отображалось так как Вам надо.

9

Re: Как вывести третий уровень меню

Получилось. Спасибо.
Если я хочу сделать выпадающее меню в классической теме как в детской (у категорий отображаются подкатегории на 2 уровне), то нужно прописать стили или ещё править этот шаблон?

Повысить оценку Понизить оценку

Re: Как вывести третий уровень меню

По идее обойтись можно и стилями.