wa_print_tree не выводит список категорий Есть решение
Решил создать второе меню по направлениям, воспользовался шпаргалкой и пошел по пути wa_print_tree
Код вышел следующий
<div class="sbNav1 sidebar__block mb-401"> <a class="sbNav__header" href="#sidebarNav1" data-toggle="collapse">[`Направления`]</a> <ul class="list-group collapse in" id="sidebarNav1"> {$wa->shop->categories(257, null, true, fallse, null)} </div>
Но при этом раскладе выводится надпись Array а самих данных массива и не видать. Не подскажете, в чем состоит загвоздка?
14 ответов
Вы пишете о wa_print_tree, а пытаетесь использовать {$wa->shop->categories()}. О чём ваш вопрос?
Да, Вы правы, белиберда вышла. Копипаст сработал некорректно.
Вот корректный код:
Суть вопроса в том, как посредством wa_print_tree вывести массив всех подкатегорий находящихся в категории 257.
Код ошибки:
То есть что-то конфликтует с
, а что именно я не могу понять
Замените
на
Спасибо. удалось вывести меню. Однако через wa_print_tree оно оказалось совсем не симпатичным.
Не особо реагирует на css и выдает названия категорий с кружочками перед названиями и не позволяет сделать список аналогичный родному меню, чтобы выводились категории, а при наведении на них курсора мыши показывались дочерние категории.
unfolded настраивается так, что либо видно все дерево, либо только родительские категории...
Вопрос: можно ли вообще через wa-print-tree сделать аналог стандартного бокового меню или проще поискать другой способ вывода?
{wa_print_tree} только формирует HTML-код списка <ul>. Стилизовать его нужно средствами CSS, а поведение формировать средствами JavaScript.
wa_print_tree конечно штука простая, но кастомизировать его потом не очень удобно, хотя и возможно, но это скорее субъективное т.к. я не люблю списки в основном меню категорий без жесткой необходимости. У вас же есть перед глазами пример как сделано родное меню. Сделайте так же. Если на вашем сайте будет 2 уровня вложенности категорий, то {$categories = $wa->shop->categories(0, 2, true)}, а внутри этого первого foreach прогоните ещё один по $category.childs и кастомизируйте вывод первого и второго уровней как угодно независимо друг от друга в блоках с разными стилями и свойствами css. Реакции можно навешивать через простейшие js такого типа $(".menu").click(function () {$(this).siblings(".submenu").slideToggle(150);});.
Неужели нет способа вывести две родительских категории в разные меню?
Ваш метод не плох, но тут возникнет проблема с усложнением ЧПУ, чего не очень хотелось бы. Из-за корявого импорта из 1С мне уже и так приходится глушить одну родительскую категорию и работать только с ее подкатегориями, а следовательно если пойти по предложенному Вами пути, то будет еще больше каши и круговерти..(
Надо просто формировать одно меню как $wa->shop->categories(id первого родителя, 2, true)} и второе как $wa->shop->categories(id второго родителя, 2, true)}
Конечно мне вся глубина проблемы, включая 1С, не видна, но два разных меню с двумя родителями (да хоть 10) вроде бы не проблема совсем.
Если прописывать так, то возникает проблема в том, что переменная categories одна и та же и в нее просто перезаписываются данные вторым условием и получается, что работать может только второе меню, а первое соответственно не срабатывает.
Я поднимал эту же тему в других топиках, но там либо не отвечают, либо хамят.
https://support.webasyst.ru/fo...
Нет-нет-нет. Работать будут оба меню четко и безупречно. Весь вопрос скорее всего у вас встал на стадии, когда имеющийся JS код или способ создания меню приводят к неправильной работе интерфейса возможно.
Дело в том, что никаких условий там перезаписываться ничем не должно. Переменные могут быть разные.
В случае без print_tree просто в одном цикле выводите содержимое категорий первого родителя, а во втором - второго. Вы же четко запрашиваете по ID родителя конкретные данные и их и получаете.
Давайте сделаем так. Начните с самого простого. На пустой HTML странице, созданной в приложении Магазин, сначала выведите двух родителей с их детьми первого уровня таким образом
Потом проведите ваши опыты с 1С и посмотрите изменится ли что-то в этом выводе. Если все сделано правильно, то ничего не должно поменяться и/или перезаписаться одно на другое.
Затем потихоньку начинайте кастомизировать вывод через CSS и прицеплять к этому хозяйству JS, но не обязательно те, которые есть в вашей теме дизайна, т.к. с ними видимо возникают сложности. Можете в сети найти массу примеров различных красивых меню на JS от простейших до сложных.
Хотя всё это можно делать и одним выводом типа от самого корня, но на один уровень глубже, если не требуется разносить эти меню совсем друг от друга.
Большое спасибо за подсказку, так уже становится яснее. Но все же не до конца понимаю алгоритм работы с уровнями вложенности.
По Вашему коду выходит так, что выдаются только категории 3го уровня...
Сейчас у меня:
1. косметика
1.1. aravia
1.1.1. Депиляция
2. Направления
2.1. Перед депиляцией
Соответственно для первого меню выводятся только пункты 3го уровня, т.е. 1.1.1.
А для второго меню не выводится вообще ничего, т.к. там просто нет 3го уровня вложенности.
Как я понимаю в коде
число 2 отвечает за глубину вложенности, менял его на 1 и 0, но тогда вообще ничего не выводится.
Пободался пободался и снова уперся в неизвестную проблему.
Удалось кастомизировать вывод меню по тому же принципу что и стандартное меню, но есть огромная проблема, показывает только первый уровень вложенности категорий..
1. Категории
1.1 для депиляции
1.1.1 перед депиляцией
Вывод категории уровня 1 я отсек путем указания этой категории как родительской.
1.1 выводится и работает, но не выдает стрелочку рядом с этим пунктом меню для вывода 1.1.1
Код следующий
Я не совсем понимаю за что отвечают данные в скобках в коде
Может тут кроется суть того, почему у меня дочерние категории не выводятся.. Потому что мне кажется, что я в этих скобках указываю какое-то ограничение на вывод и вместе с этим ограничением прописываю все это в переменную из которой потом уже соответственно ничего нельзя вытащить.
Посмотрите описание этого метода в "Шпаргалке".
Спасибо большое. Разобрался. Не подумал, что внутренние параметры функции тоже выступают как переменные.
Двойной вызов, который вы описали в пункте 1 Вы имеете ввиду
{if count($wa->shop->categories(256,null,true)) > 0}
и
{foreach $wa->shop->categories(256,null,true) as $item1}
?
Это не моя придумка, так написан код вызова стандартного меню в моей шаблоне..
Для тех, кто следит за данной веткой, прикладываю итоговый(рабочий) код меню.