Тема: Как вывести третий уровень меню
http://luchski.ru/ - сейчас на нашем сайте выводится двухуровневое меню
есть шаблон category.tpl - как можно его изменить, чтобы выводить и третий уровень меню?
Форум ReadyScript Вопросы по работе с системой Как вывести третий уровень меню
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
http://luchski.ru/ - сейчас на нашем сайте выводится двухуровневое меню
есть шаблон category.tpl - как можно его изменить, чтобы выводить и третий уровень меню?
Точно также как меню предыдущего уровня. Там же идёт перебор уровней. И на каждом уровне у категории, есть поле 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}
Третий уровень выводится, но сразу у всех категорий и даже не наводя курсор, т.е. при наведении на категорию 1 уровня, выводится и вторая и все третьи, которые есть. А как сделать, чтобы третий уровень открывался при наведении на второй?
Нужно правильно назначить стили CSS. Т.к. сейчас по умолчанию под условия показа подменю подходит и третий уровень, поэтому и показывается. Посмотрите статьи в интернете по созданию выпадающего меню на CSS. Я не буду расписывать Вам эти моменты, т.к. они относятся к базовым знаниям CSS. Вам нужно просто подтянуть знания по этой теме.
В Классической теме меню состоит из 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}
Пробовал как описано выше, не работает.
Вот так можно.
{* Список категорий из 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}
Только не забывайте, что в этой теме стили только для двух уровней. Т.е. Вам надо будет стили прописать самостоятельно для третей, чтобы отображалось так как Вам надо.
Получилось. Спасибо.
Если я хочу сделать выпадающее меню в классической теме как в детской (у категорий отображаются подкатегории на 2 уровне), то нужно прописать стили или ещё править этот шаблон?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум ReadyScript Вопросы по работе с системой Как вывести третий уровень меню