Активная подкатегория подсвечивает родителя Есть решение
Есть ли возможность через smarty-плагин wa_print_tree подсветить родителя активной подкатегории.
Вообще было бы классно подсвечивать весь путь до активной подкатегории. Сейчас приходится пользоваться костылями на скриптах. =(
12 ответов
Встроенный wa_print_tree не умеет подсвечивать родителя. Всегда можно сделать свой с любым блэкджеком, в принципе...
Если что, стандартный можно скопировать отсюда (и положить копию рядом):
wa-system/vendors/smarty-plugins/function.wa_print_tree.php
Леонид, спасибо за ответ!
Я, к сожалению, как разработчик тем, не могу выходить за пределы папки темы дизайна. =((
Вы как разработчик тем можете использовать javascript. Рекурсивно проходите все узлы в поисках текущего, а затем возвращаетесь к родителю и присваиваете ему нужный класс.
Можно наколдовать примерно вот так (при необходимости добавив нужных параметров из wa_print_tree средствами Smarty типа selected и class). Небольшой недостаток — пара лишних SQL-запросов для получения id родителей в первом куске кода.
Михаил, спасибо! Буду пробовать! =)
Способ отлично работает! Ещё раз спасибо!
Михаил, может быть подскажете, есть ли возможность отследить главных родителей в получившемся дереве категорий.
Я хочу всем элементам первого уровня присвоить один класс, а все остальным - дочерним другой класс.. Сейчас приходится делать это через JS.
Примерно так:
ul
li.parent
--ul
---li.child
---li.child
--/ul
li.parent
/ul
1. Добавьте в функцию tree параметр level, вот так:
{function tree level=0}
2. При рекурсивном вызове функции внутри самой себя указывайте увеличенное на 1 значение этого параметра:
{tree items=$item.childs level=$level + 1}
3. В нужном месте в теле функции добавьте условие
{if $level == 0}добавляйте/отображайте тут нужное содержимое для самого верхнего уровня{/if}
или
{if $level == 0}добавляйте/отображайте тут нужное содержимое для самого верхнего уровня{else} а тут для всех остальных вложенных уровней{/if}
Михаил, подскажите пожалуйста, а как тут определить наличие вложенных категорий? Хочется вывести доп. класс "dropdown" для родительской категории.
Спасибо!
Используйте условие
{if $item.childs|default:null}...{/if}
Оно, кстати, уже используется в функции для отображения вложенных элементов, если они есть у текущей категории.
Что-то сразу не догадался. {if $item.childs|default:null}class="dropdown"{/if}
А как обнулить {function tree} ?
Хочу использовать эту функцию для вывода страниц сайта с одной структурой, и для вывода категорий магазина с другой структурой.
Разобрался.