
Smarty решение многоуровнего меню магазина Shop-Script. Позволяет персонально настраивать вид группы подкатегорий через доп. параметры. Меню оптимизированно и имеет только один запрос к базе данных.
{* ------------------------------------------
Инструкция к меню
Значение доп. параметра topmenu
Устанавливаются для категорий 3-го уровня
- topmenu=0 - подменю и меню не отображается, тоже самое если не указывать доп. параметр
- topmenu=1 - отображает меню без подменю
- topmenu=2 - отображает меню с 2 подменю
- topmenu=3 - отображает меню с 3 подменю
- topmenu=4 - отображает меню с 4 подменю
- topmenu=5 - отображает меню с 5 подменю и тд
------------------------------------------- *}
{function menu level=0 depth=0}
{$col_show = ifset($cat.params.topmenu, 0)}
<a href="{$cat.url}" title="{$cat.name}">
{if $level == 0}
{$cat.name|replace:" ":" "}
{else}
{$cat.name}
{/if}
</a>
{if ifset($cat.childs) && $depth >= $level && (ifset($col_show) > 1 || $level != 2)}
{$col = 0}
<ul>
{foreach $cat.childs as $child}
{$col = $col + 1}
{$child_show = ifset($child.params.topmenu, 0)}
{if ($level != 1 || $child_show != 0) && ((ifset($col_show) >= $col) || $level!=2)}
<li>
{menu cat=$child level=$level+1 depth=$depth}
</li>
{/if}
{/foreach}
</ul>
{/if}
{/function}
<!-- Top Menu Block -->
<div id="topmenu_bl">
{$category = $wa->shop->categories(0, null, true, true)}
<ul class="topmenu">
{foreach $category as $cat name=foo}
{if $smarty.foreach.foo.iteration <= 3}
<li>
{menu cat=$cat depth=2}
</li>
{/if}
{/foreach}
</ul>
</div>
{if $height = $theme_settings.topmenu_max_height}
<style>
@media only screen and (min-width: 1010px) {
ul.topmenu > li > ul { max-height: {$height}px; }
}
</style>
{/if}
