Страница 1 из 1

Не выводить некоторые категории в меню

Добавлено: 21.07.2018, 17:50
Julius123
У меня есть подпункты категорий созданные через админку, но их не нужно выводить в меню. Подскажите как правильно скрыть их в меню? Пробовал в цыкле вывода меню сделать проверку на номер категории но все равно оно выводится.

Вот сам код меню:

Код: Выделить всё

<nav id="catalog_menu" class="hidden_small">                 
    {function name=categories_tree}
        {if $categories}
            <ul>
            {foreach $categories as $c}
                {if $c->visible}
                    {if $c->children|count > 1}
                    <li class="parent{if $category->id == $c->id} opened{/if}">
                        <a class="{if $category->id == $c->id} selected{/if}" href="{$lang_link}catalog/{$c->url}">
                          {if $c->image}
                          <i class="cat_icon">
                             <img src="{$c->image|resize:23:23:false:$config->resized_categories_dir}"/>
                          </i>
                    {/if}
                            <span>{$c->name|escape}</span>
                            <i class="angle_icon hidden_small">{include file='svg_sprite.tpl' svgId='angle_icon'}</i>
                        </a>
                        {if $category->id != 44}
                        <i class="cat_switch hidden_lg">{include file='svg_sprite.tpl' svgId='angle_icon'}</i>
                        <div class="submenu{if $c->image} subimage{/if}">
                            {categories_tree categories=$c->subcategories}
                        </div>
                         {/if}
                    </li>
                    {else}
                   <li class="parent{if $category->id == $c->id} opened{/if}">
                        <a class="{if $category->id == $c->id} selected{/if}" href="{$lang_link}catalog/{$c->url}">
                          {if $c->image}
                          <i class="cat_icon">
                             <img src="{$c->image|resize:23:23:false:$config->resized_categories_dir}"/>
                          </i>
                    {/if}
                            <span>{$c->name|escape}</span>
                        </a>
                    </li>
                    {/if}
                {/if}
            {/foreach}
            </ul>
        {/if}
    {/function}
    {categories_tree categories=$categories}
</nav>

Проверку делал через смарти:

Код: Выделить всё

{if $category->id != 44}
и
{if $c->id != 44}

Добавлено: 22.07.2018, 06:28
korshunov
Пробуйте примерно так:

{foreach $categories as $c}
{if $c->visible && $c->id!=44}

Добавлено: 22.07.2018, 06:45
Julius123
korshunov писал(а):Пробуйте примерно так:

{foreach $categories as $c}
{if $c->visible && $c->id!=44}
Спасибо, действительно помогло но в меню выводится иерархия там где эти скрытые подкатегории, возможно это скрыть? http://prntscr.com/k9gaf9

Добавлено: 22.07.2018, 06:52
korshunov
Пробуйте по-своему формировать и использовать параметр has_children_visible, как делается стандартно...

Добавлено: 22.07.2018, 06:55
Julius123
korshunov писал(а):Пробуйте по-своему формировать и использовать параметр has_children_visible, как делается стандартно...
Уже с этим разобрался, нашел код вывода субменю, и тем же правилом закрыл id основной категории в которой есть скрытые категории. Вопрос остался только в том можно ли как-то более компактно сделать эту проверку? Категорий для скрытия будет около 30 и писать что-то вроде {if $c->visible && $c->id!=44 && $c->id!=45 && $c->id!=46 && $c->id!=47} очень массивно. Можно как-то перечислить id категорий в одном ифе?

Добавлено: 22.07.2018, 07:32
korshunov
{if $c->visible && !in_array($c->id, array(44,45,47))}

Добавлено: 22.07.2018, 07:48
Julius123
korshunov писал(а):{if $c->visible && !in_array($c->id, array(44,45,47))}
Большое спасибо. Работает.