С Друпалом дружу давно, но тут на казалось бы ровном месте споткнулся. 2 дня уже плотно ищу решение.
На сайте есть:
- 5 бутиков
- список брендов
- типы товаров
- товар
Соответственно нужно построить такую иерархию:
Через таксономию похоже никак не сделать - во первых она неадекватно работает с дочерними терминами имеющими множество родителей. И невозможно связать разные словари.
На сайте есть меню: Бутики
При выборе бутика_1 нужно вывести список брендов связанных с этим бутиком (бренды в разных бутиках частично совпадают).
Далее при выборе бренда должен открыться список типов товаров.
Ну а далее уже товар выбранного типа.
Поиск юзал, подобных вопросов полно. Но подходящего решения так и не нашел.
Если делать все в одном словаре таксономии, придется многое дублировать. У меня в сумме всего терминов 50 предполагается, а с дублированием получится раз в 10 больше.
Грешным делом задумался о возможности попробовать сделать для каждой категории свой тип материала, а каждый пункт сделать нодой. И связать их через nodereference.
Комментарии
У термина в отношениях можно задать несколько родителей сразу.
1. Бутики делаем таксономией.
2. В тип материала Бренд добавляем поле ссылку на термин таксономии Бутик. Делам возможность множественного выбора, как уже сказал sergeybelya.
3. Типы товаров тоже делаем таксономией, добавляем в этот словарь ссылку на тип материала Бренд.
4. В тип материала Товар добавляем ссылку на термин таксономии Тип товаров и также делаем ссылку на тип материала Бренд, только по феншую, наверное, нужно делать ссылку не через nodereference, а через entity_reference.
Таким образом
1. Выводим вьюсом или еще как все Бутики.
2. При выборе Бутика выводим вьюсом все бренды которые имеют термин таксономии равный конктретному Бутику (задавая соответсвующий контекстный фильтр).
3. При выборе бренда, показываем вьюсом все типы товаров, которые имеют ссылку на бренд.
4. Показывем товары вьюсом, тут надо два аргумента передать в контекстный фильтр - Бренд и Тип товара.
Спасибо большое.
По второму пункту - во вьюсе контекстный фильтр как я понимаю того же типа, что стандартная вьюха для вывода терминов?
И в 3-м пункте тоже самое только для нод?
Попробую сделать сейчас. Только бренды по моему пересекутся. В разных бутиках у меня одни и те же бренды.
Вчера я начал делать все в одном словаре, несмотря на все недостатки. А чтобы не мучаться с ручным дублированием дочерних терминов, поставил hierarhical select, чтобы при необходимости добавлять нужные термины при создании товаров.
Но такой способ мне все-таки не очень нравится. К брендам, типам, бутикам нужно привязать картинки. И при этом способе придется вручную добавлять картинки к дублирующимся терминам столько раз, сколько они повторяются.
Sandy Big Boy Твой способ думаю будет правильнее.
Удалось вывести первый, второй пункт. Третий как бы вывел. С четвертым уровнем проблема.
Как задать несколько аргументов? Аргумент же берется из url, а если это страница термина или нода, то это либо tid либо nid.
Если возможно задавать несколько аргументов, то на каждом этапе нужно будет задать по 2-3 аргумента, иначе информация об иерархии теряется.
Переход по иерархии должен быть такого вида:
Бутик
Бренд (имеет поле-> Бутик)
со страницы бутика переходим на список брендов ссылающихся на него
Тип товара (имеет поле -> Бренд)
со страницы бренда переходим на список типов товара (но уже на этом этапе теряется информация о бутике, да и о бренде с которого был переход - тоже, т.к. типы товара ссылаются референсно на все бренды)
Товар (имеет поля: -> Бутик
-> Бренд
-> Тип товара)
И все это при условии что я смогу задать несколько контекстных фильтров в каждой вьюхе.
Два аргумента задать можно, да берется из url, может быть и по-другому как-то можно, но я делал так.
Я делал аналогичное на панелях (я на них вообще все делаю), как сделать это на чисто views не подскажу, никогда так не делал.
Посмотрел как было у меня сделано.
Это я переопределял вывод поля заголовок, чтобы получить нужные аргументы из url.
Может быть и покрасивше способы есть, но мне такое первым в голову пришло.
Спасибо. Но похоже такой способ не подойдет. Как я выше писал, при таком переходе от вьюхи к вьюхе, теряется информация о том откуда я собственно перешел. Типы товаров например референсом ссылаются на все бренды, соответственно никак не удастся соблюсти иерархию.
Придется делать все в одном словаре, и выводить вьюсом дочерние термины.
Жаль, такая мелочь казалась бы, но других вариантов похоже нет. Я даже придумать не могу алгоритм того как это можно было бы организовать еще.
Коротко говоря, если правильно связать все типы материалов и словари таксономии, то ничто никуда не потеряется.
Если я ставлю в "типе товара" референсное поле на "бренд", надо ли у "бренда" добавлять соответствующее поле со ссылкой на "тип товара"?
Я сделал бутики, бренды и типы товаров отдельными словарями таксономии. И через Entity reference сослался:
У терминов Бренды сделал ссылку на Бутики
У Типов товаров поставил ссылку на Бренды
И у нод типа "Товар" поставил ссылки на все 3 словаря.
Сделал вьюху типа "Термин".
Путь указал "taxonomy/term/%"
В контекстном фильтре выбрал поле "Бутик" (которое отмечается у терминов Брендов, ссылается на бутики).
Вывожу в ней названия терминов. У поля названия термина переписал вывод на такой: brands/%1/[tid] - где %1 - бутик, [tid] - бренд.
Таким образом переходя по ссылке у меня в адресе есть информация о бутике и бренде.
Далее создаю еще вьюху с адресом "brands/%/%"
В контекстном фильтре добавляю " Поле: Бренд"
И к примеру на странице "brands/1/120" у меня ничего не показывается.
Если меняю адрес во вьюхе на такой: brands/1/%, то работает.
Что не так?
Но в этом месте я еще готов смириться. У меня 5 бутиков, и можно сделать 5 вьюх для них.
Еще мне нужно изменить адрес поля "Термин таксономии" по тому же принципу что в предыдущей вьюхе. т.е. это должен быть адрес текущей страницы + /[tid]
Не нашел способа вставить адрес текущей страницы.
Есть вроде модуль добавляющий php поле во views, как вариант наверное можно через него вытащить адрес текущей страницы.
Несколько проблем решил:
На каждый бутик создал по вьюхе (5 штук не страшно, хоть и некрасивая идея)
Это тоже решил модулем views php
Теперь у меня последний путь в этой иерархии выглядит так: brands/1/121/236, где уже показываются ссылки на ноды соответствующие всем критериям. Пусть адрес не очень красивый, зато указаны все 3 необходимых аргумента. Попробовал повесить на такой адрес синоним - не работает. Буду признателен если кто подскажет как заставить показывать синоним вместо такого адреса.
Из недоделок: осталось переопределить breadcrumbs и заголовки страниц. К примеру вписываю как и сказано в подсказках: %4, и вместо заголовка вижу этот самый %4.
Сорри, до сих пор голова туго соображает после выходных, не могу осилить все.
Пока только следуюещее могу сказать:
1. С хлебными крошками, какие модули я не пробовал, всегда были какие-то сложности, проблему решил только модуль которые специально под панельки заточен.
2. Заголовки страниц наверное проще задавать модулем Metatag, он и для другого пригодится.
Sandy Big Boy Спасибо большое. Очень помог.
С заголовками тоже решил проблему. Я сначала контекстные фильтры не очень правильно настроил. В фильтрах указывал аргумент напрямую в пункте "Если значения фильтра НЕТ в URL", а надо было в пункте "Когда значение фильтра присутствует в URL или предоставляется по умолчанию". Там и настраивать меньше, и переопределение заголовков работает.
Остались хлебные крошки, но пока отложу их на потом, если вообще потребуют их. Думаю их можно сделать вложением во вьюс, а стандартные крошки убрать.
Рад что помог. А лишнее упражнение для мозгов всегда полезно.