DeveLab Опубликовано 14 апреля, 2016 Жалоба Поделиться Опубликовано 14 апреля, 2016 (изменено) Здравствуйте У меня есть 7 уровней вложения в меню. Есть задача что бы в каждой категории отображались только подкатегории. С этим хорошо справляется {foreach $category->subcategories as $c} <li> <a {if $category->id == $c->id}class="selected"{/if} href="catalog{$c->url}"> {$c->name} </a> </li> {/foreach} Но в последней категории в меню тогда пусто. Как можно реализовать решение что бы в последней категории отображались соседние (тот же уровень)? = = = = = = = = = Увидел решение "Универсальная функция, которая выводит СОСЕДНИЕ категории на ЛЮБОМ уровне вложенности" {* Рекурсивная функция вывода соседних категорий *} {function name=categories_tree_siblings} {if $categories} {foreach $categories as $c} {* Показываем только видимые категории *} {if $c->visible} {if $category->parent_id == $c->parent_id} <li> <a {if $category->id == $c->id}class="selected"{/if} href="catalog{$c->url}" data-category="{$c->id}">{$c->name|escape}</a> </li> {/if} {if in_array($category->id, $c->children)} {categories_tree_siblings categories=$c->subcategories} {/if} {/if} {/foreach} {/if} {/function} <ul>{categories_tree_siblings categories=$categories}</ul> Может её как то переделать что бы работала только с последним уровнем? Изменено 14 апреля, 2016 пользователем DeveLab Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 14 апреля, 2016 Жалоба Поделиться Опубликовано 14 апреля, 2016 {if $category->subcategories} {foreach $category->subcategories as $c} <li><a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}">{$c->name}</a></li> {/foreach} {else} {$parent_cat = $category->path[$category->path|count-2]} {if $parent_cat->subcategories} {foreach $parent_cat->subcategories as $c} <li><a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}">{$c->name}</a></li> {/foreach} {/if} {/if} попробуйте так, действует следующим образом, если у категории есть подкатегории выводить их, если их нет, выводить подкатегории родительской категории. Цитата Ссылка на сообщение Поделиться на другие сайты
DeveLab Опубликовано 14 апреля, 2016 Автор Жалоба Поделиться Опубликовано 14 апреля, 2016 {if $category->subcategories} {foreach $category->subcategories as $c} <li><a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}">{$c->name}</a></li> {/foreach} {else} {$parent_cat = $category->path[$category->path|count-2]} {if $parent_cat->subcategories} {foreach $parent_cat->subcategories as $c} <li><a {if $category->id == $c->id}class="selected"{/if} href="catalog/{$c->url}">{$c->name}</a></li> {/foreach} {/if} {/if} попробуйте так, действует следующим образом, если у категории есть подкатегории выводить их, если их нет, выводить подкатегории родительской категории. Невероятно! Большое спасибо! С первого раза 100% попадание Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 16 апреля, 2016 Жалоба Поделиться Опубликовано 16 апреля, 2016 Работает это лишь в простейших ситуациях.А вообще при таком способе могут быть сюрпризы - например, когда в категории есть две подкатегории и обе они отключены... Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.