Drupal 7: Создание каталога с помощью Taxonomy & Views & Panels

24.03.2013

Всем привет. Решил реализовать каталог на Drupal 7. Целью было создать его без модулей Ubercart и Commerce. Конечно, я понимаю что из них тоже можно сделать каталог, но зачем за собой тянуть столько левого функционала, я не понимаю.

Конечно я полез в гугл и нарыл инфу. Как оказалось, на англоязычных сайтах все решения которые были предложены, так или иначе использовали Ubercart и Commerce. Среди русскоязычных попался всего лишь один достойный: «Продвинутый каталог на Drupal 7». Я его попробовал, мне понравилось, но у него есть недостатки:

  1. Самый главный — невозможность задания алиасов для адресов. Т.е. Разделы каталога имеют жесткий адрес catalog/%TID.
  2. Необходимость включения фильтра PHP. Я стараюсь избегать включения данного модуля, ведь если сайтом будут управлять криворукие — то этот фильтр просто яма в безопасности.
  3. Плодятся типы материалов (для фильтров). Не пробовал, точно о проблеме сказать не могу. Мне хватило первых двух чтобы отказаться от него.

Перепробовал уйму вариантов на одном лишь Views. Были даже рабочие, но их гибкость вызывала сомнения. В итоге решением всех проблем стала связка Views & Panels. Именно об этом я и расскажу.

P.s. То что замазано на скринах — настройки по умолчанию (не менялись).

Подготовка

Не удивительно, но для создания каталога понадобится Views, Panels и конечно же Ctools. Включаем:

  • Chaos tools
  • Page manager
  • Views content panes
  • Panels
  • Views & Views UI

Для начала создайте словарь таксономии с названием «Категории каталога» (или же как вам нравится). Добавьте необходимые категории.

Теперь создайте новый тип материала (например «товар») который будет добавляться в каталог, и добавьте ему поле «Term reference» которое ссылается на ваш словарь «Категории каталога». Также добавьте парочку товаров, чтобы видеть результаты.

Создание представлений (Views)

Создание главной каталога

Тут проще простого.

  • Жмем «Add new view»
  • Указываем название «Каталог»
  • Show: Taxonomy terms of type «Категории каталога»
  • Ставим галочку «Create a page» и заполняем.
  • Page title: Каталог
  • Path: catalog
  • Жмем кнопку «Continue & edit»
  • Делаем необходимый Format. Например «Table».
  • В разделе Filter criteria жмем «add».
  • Выбираем «Taxonomy term: Parent term» и жмем «Apply», затем сного «Apply». Тем самым мы сделали чтобы выводились только родительские категории.
  • Сохраняем вьюху.

Этими действиями мы создали страницу по адресу site/catalog на которой будут отображаться только родительские термины.

Главная каталога.
Главная каталога.

Вывод дочерних категорий

Создаем новое представление:

  • View name: «Дочерние категории».
  • Show Taxonomy terms of type «Категории каталога».
  • Снимаем галочку create a page.
  • Жмем «Continue & edit».
  • Добавляем новый тип представления Content pane
Content pane.
Content pane.
  • Если надо, меняем Format.
  • В Relationships выбираем Taxonomy term: Parent term.
  • В Contextual filters выбираем Taxonomy term: Term ID. Указываем Relationship — Parent (если не меняли в предыдущем пункте). В разделе значение по умолчанию выбираем Provide default value, type: Taxonomy term ID from URL и жмем Apply.
Значение по умолчанию.
Значение по умолчанию.
  • Сохраняем представление.

Этими действиями мы создали представление, которое будет выводить список дочерних терминов, относительно текущего.

Представление дочерних категорий.
Представление дочерних категорий.

Вывод продукции в категории

Создаем очередное представление:

  • View name: Товар
  • Show Content of type «Продукт» (название вашего типа содержимого под продукцию)
  • Снимаем галочку Create a page.
  • Жмем Continue & edit.
  • Добавляем Content pane.
  • Добавляем Contextual filters — Content: Has taxonomy term ID (with depth). В Depth указыем: 0 — если хотите чтобы отображался товар текущей категории, 10 — если хотите чтобы отображались товары из текущей категории, а также товары из его подкатегорий.
  • Ставим галочку Provide default value и выбираем Taxonomy term ID from URL.
Глубина.
Глубина.
  • Жмем Apply.
  • В разделе No results behavior добавляем Global: Text area и пишем что-то типа «В данной категории еще нет товара». Думаю не стоит объяснять когда оно будет вылезать.
  • Сохраняем представление.

Данное представление будет выводить весь товар, у которого выбрана данная категория. Соответственно вы можете выводить какие угодно типы материалов.

Вывод продукции в категории.
Вывод продукции в категории.

Настройка Panels

Теперь настроим отображение всего и вся. Для начала переходим на страницу стандартных панелей: admin/structure/pages. Нам нужно включить term_view.

Включаем термины.
Включаем термины.

Затем жмем «Edit» и добавляем новый вариант: «Add a new variant»:

  • Title: Каталог.
  • Variant type: Panel.
  • Optional features: ставим галочку Selection rules.
  • Жмем Create variant.

Перед нами открывается следующий этап настройки. В нем указывается то, когда сработает данный вариант. Нам надо чтобы он срабатывал на термины из словаря «Категории каталога». Для этого:

  • Из списка выбираем Taxonomy: vocabulary и жмем Add.
  • В pop-up окне выбираем наш словарь и жмем Save.
  • Затем жмем кнопку Continue.

Шаг разметки пропускаем, поэтому жмем Continue. Следующий шаг пропускаем, ибо он нам не нужен. В итоге мы окажемся на этапе Panel content.

Здесь нам надо указать что и где будет отображаться. Для начала сделаем чтобы заголовок страницы был как и у категории, для этого в поле title пишем %term:name.

Теперь все просто, жмем на шестеренку слева от региона center и выбираем Add content. Слева выбираем категорию Views и добавляем «Дочерние категории». Тоже самое проделайте и с представлением «Товар». Все шаги и настройки после выбора представления просто игнорируйте, они нам не нужны.

После того как вы это сделали получится примерно следующее.

Результат добавления представлений в Panels.
Результат добавления представлений в Panels.

Завершающим действием будет нажатие кнопки Create variant.

На этом все. Теперь перейдя по адресу site/catalog вы увидите категории. Перейдя в категорию, вы увидите товар а также подкатегории.

Результат.
Результат.

Заключение

Плюсы:

  • Гибкость благодаря Views & Panels.
  • Используются системные алиасы.
  • Нет фильтра php.
  • Cтраницы taxonomy/term/ID из словаря «Категории каталога» будут более информативными.

Комментарии

Г
Гость
04.04.2013

Заработало! Спасибо!

А
Анастасия
25.04.2013

Спасибо, все работает! Как бы теперь еще к этому ЧПУ привязать?

N
Niklan
25.04.2013

Pathauto.

R
RxB
28.04.2013

Фичу давай

А
Александр
29.04.2013

А у меня не получилось (:

Все было понятно и получалось ровно до этого места:

Затем жмем «Edit» и добавляем новый вариант: «Add a new variant»:

  • Title: Каталог.
  • Variant type: Panel.
  • Optional features: ставим галочку Selection rules.
  • Жмем Create variant.

Не могу найти "Optional features: ставим галочку Selection rules.". Если возможно, скрин бы увидеть...

Спасибо!

N
А
Александр
29.04.2013

Спасибо огромное! Так хотелось быстрее сделать каталог, что... забыл включить Page manager. :)

Полезный блог! :)

А
Антон
04.05.2013

Добрый день. А у меня не получилось. Все сделал как написано, но у меня при переходе в основной каталог не показывает подкаталоги и товар! В чем может быть причина?

N
Niklan
05.05.2013

Доброго времени суток. Проблема в том, что в главном каталоге показываются только категории, без подкатегорий и товаров. Их отображение нужно включить по принципу как это сделано во второй вьюхе, которая отвечает за вывод подкатегорий и товаров.

А
Антон
05.05.2013

Спасибо, подкаталоги показывает, но сам товар который я создавал в content type и привязывал к определенному термину таксономии не выводиться как показано на последнем вашем рисунке? Вместо этого появляется надпись которую мв добавляли "В данной категории еще нет товара"

N
Niklan
05.05.2013

Значит в нем нет товара для вывода. Вы правильно указали в фильтрах Views какой тип содержимого выводить?

Попробуйте импортировать все Views которые прикреплены к статье. Может где-то в их создании допустили ошибку? В особенности проверьте: "Вывод продукции в категории". Она отвечает за вывод товара. В частности в ней же проверьте RELATIONSHIP и CONTEXTUAL FILTERS - они самое важное в той вьюхе.

A
Alex
08.05.2013

Большое спасибо за статью. Один вопрос по алиасам: для терминов стоит PA catalog/[term:parent:name]/[term:name] для нод -  catalog/[node:field_fieldname]/[node:title], но при таком раскладе для нод закреплённых за неродительскими терминами путь получается неполным, т.к. в [node:field_fieldname] подставляется только имя ноды, а не весь путь с именами родителей терминов. Можно ли что-то с этим сделать?

N
Niklan
08.05.2013

Поставьте Hierarhical Select. Там есть опция что он будет сохранять путь. Т.е. если вы выбирите "Фрукты -> Апельсин", то они учтуться оба и путь проложиться как catalog/фрукты/апельсин/node-title. Поэкспереминтируйте.

s
ser_house
11.05.2013

Для полей тоже можно разворачивать в паренты:

[node:field-category:parent:parent:name]/[node:field-category:parent:name]/[node:field-category:name]/[node:title]

Сорри, Niklan :) но линейный режим hs порядком доставляет.

В
Виктор
20.05.2013

Подскажите как вывести количество продуктов в категории?

N
Niklan
21.05.2013

Аггрегацией поля во Views. Будет время напишу про это.

A
Azat
29.05.2013

Спасибо большое за статью!

У меня вопрос, как сделать так, чтобы по такому же принципу авторизованные пользователи могли добавлять и редактировать товары или услуги?

N
Niklan
29.05.2013

Дать пользователям соответствующие права.

T
Tezzz
07.06.2013

Добрый день! Огромное спасибо за отличную статью!

Но у меня вышла загвоздка, при входе на страницу Каталог я как и полагается, вижу список родительских терминов, а при выборе любого из терминов я вижу полный список дочерних терминов причем этого термина, в всего словаря. Подскажите, в чем может быть дело?

Спасибо!

N
Niklan
07.06.2013

Рекомендую внимательно и пошагово переделать (перепроверить) раздел "Вывод дочерних категорий".

T
Tezzz
08.06.2013

Разобрался! Спасибо огромное! Статья -супер!

Н
Новичок
12.06.2013

Здравствуйте! Большое спасибо за ваш урок.

Но у меня при создании представления возникла необычная проблема.

Дело в том, что в пунтке: 

  • Show Taxonomy terms of type «Категории каталога».                                                                       не выводятся термины таксономии, а все время стоят типы материалов http://prntscr.com/19jrkb (здесь можно это увидеть)                                                                             Буду очень рад, если поможете.                                                                                                             Спасибо заранее
N
Niklan
12.06.2013

Здраствуйте. У вас случаем модуль jQuery update не установлен? Он достаточно сильно конфликтует с views, и на время работы в оном, данный модуль необходимо выключать \ выбирать версию jq 1.5

n
neutrino
13.06.2013

Здравствуйте!

Сделал по инструкции, каталог выводится, а вот когда переходишь в одну из категорий не отображаются дочерние категории... ну и с товарами тоже самое, не отображаются товары в дочерних категориях...

В чм может быть причина? Заранее спасибо)

N
Niklan
13.06.2013

Здраствуйте, причина может быть в том, что вы упустили\не правильно сделали какой-то из пунктов. Перепроверьте свои действия.

n
neutrino
13.06.2013

да уже 3 раза переделывал) не могли бы вы указать настройки views для дочерних категорий? У меня на данный момент вот такие http://pastebin.com/Vsaw4Qaw

N
Niklan
14.06.2013

Видимо вам нужно внимательнее читать :) Иначе бы вы заметили что внизу статьи есть все экспорты вьюх. Поэтому могли бы уже давно сравнить ;)

n
neutrino
16.06.2013

я походу потеряный для общества человек, в трех тополях заблудился, импорт точно таких же настроек не помог)))

может я неправильно понимаю что должно выйти в итоге? я создал словарь "Каталог" с такой вот структурой и терминами http://www.picshare.ru/uploads/130616/xZY5Wh0tU7.jpg

мне нужно чтобы при нажатии на Категория-1 открывалась страница с ссылками на Подкатегория-1 ... Подкатегория-5... про это же статья написана?)

на данный момент выход нашел, создать 2 словаря (первый с терминами Каталог-1 ... Каталог-5 и второй с терминами Подкатегория-1 ... Подкатегория-5), ну и в отображении второго словаря дать ссылку на ноду Каталог-1 ... но данный способ слишком затратный и слегка извращенский)))))

N
Niklan
16.06.2013

Вы при воссоздании учитываете то что ваш словарь может называться иначе. Т.е. не как у меня?

Представление: Дочерние термины - качайте данный экспорт. 

Затем блокнотом в самом низу, почти, меняйте:

'catalog_category' => 'catalog_category',

На машинное имя вашего словаря "Категории".

n
neutrino
16.06.2013

это я менял) спасибо за помощь, я уже по другому сделал

n
neutrino
19.06.2013

Дружище выручай, немогу никак этот дурацкий каталог создать, уже 2 недели играюсь и никак, а сильно нужно...

Если я скинул бы бэкап сайта с базой, не мог бы заглянуть что не так сделано? Я в долгу не останусь)

http://rghost.net/46857450

admin:admin - вход в админку

N
Niklan
19.06.2013

Ну я поставил ваш бэкап и там небыло панелса настроенного.

http://rghost.ru/4686620

Импортируйте, все пашет: http://i.imm.io/19Gka.jpeg

Еще раз все сверьте и поправьте. Будут вопросы, напишите :)

n
neutrino
20.06.2013

спасибо, работает) я нашел даже почему, panels_catalog.txt

$pane->subtype = 'products';

давай какие-то реквизиты электронных денег, отблагодарю за помощь)

N
Niklan
21.06.2013

Ха, ну я рад что получилось. А намек что могут быть названия не как у меня я давал.

R459277747491 - но я ничего и не просил! :)

R
RB
16.06.2013

Огромное спасибо за этот гайд, все заработало даже у полного чайника.

М
Максим
10.11.2013

Такая же штука!
Спасибо большое
 

г
грамблер
07.07.2013

А что делать с хлебными крошками?

1. Словарю разрешил отображение в меню своей структуры. Все нормально, связь с каталогом идет нормальная, но есть пару но.

2. Пока гуляю по каталогу (не по товарам) хлебные крошки отображаются, но дважды, наподобие 

Продукция » Аксессуар » Продукци » Аксессуары

как это убрать можно?

3. Когда захожу в страницу товара хлебных крошек (пути к товару по таксономии) нет. Как вставить?

 

N
Niklan
08.07.2013

Юзайте Path Breadcrumbs для генерации хлебных крошек каталога.

г
грамблер
08.07.2013

Подключил этот модуль.  попытался разобраться в путях и застрял.

У меня каталог из 3 уровней, наподобие: Каталог товара - Раздел 1 - Подраздел 1

В пути каталога  (url) всегда присутствует только 2:

каталог товара/раздел 1

или 

каталог товара/подраздел 1

не понял - это у меня глюки или такой алгоритм?

просто не могу понять, какие пути прописывать к товару, если они постоянно выпадают

И к товару путь совершенно другой, не из таксономии типа: контент/название товара. Почему путь к товару не запоминается?

N
Niklan
10.07.2013

Я с хлебными крошками не силен. Я думаю стоит спросить у Drupalace как это грамотно сделать. Он является автором модуля Path Breadcrumb, так что он 100% быстрее рязьяснит и даст ответ.

г
грамблер
11.07.2013

Я так понимаю, что проблемы с ними вылазят из-за пропуска пути в каталоге. Почему теряются промежуточные уровни при построении пути каталога в URL? Вернее, нет так, а более точно: как можно заставить каталог формировать полный путь к просматриваемым уровням/товару? Ведь у товара вообще нет пути, получается. Товар получается не связан вообще никак с каталогом по URL, ведь так не должно быть?

N
Niklan
11.07.2013

Я хлебные крошки к нему не цеплял. Будет время разберусь что к чему.

г
грамблер
12.07.2013

Хлебные крошки - это следствие. Главное - формируемые таксономией пути URL, и сейчас они формируются правильно только для 2-х уровневой структуры, больше - нигде. Ни для 3 и более уровней, ни для самого товара путей нет...

А
Александр
18.07.2013

Похожая проблема: http://www.drupal.ru/node/101747

Лишние уровни удалит, если их не будет

А
Александр
18.07.2013

Спасибо за статью, всё работает! Но появилась такая проблема:

Добавляю exposed filter на вьюху, отображающую товары, он отображается, но при клике на кнопку apply перебрасывает на главную страницу сайта.

Адресная строка до нажатия фильтра:

http://mysite/catalog/computers/notebooks

После:

http://mysite/?commerce_price_amount=30000

Пробовал сделать подобное в обычной вьюхе - там всё работает. В чём может быть проблема?

А
Александр
20.07.2013

Решил. Нужно включить аякс в настройках вьюхи.

В
Варелий
18.07.2013

Добрый день! Отличный урок! Но застопорился на одном месте:

Когда выполняю этот пункт

Теперь настроим отображение всего и вся. Для начала переходим на страницу стандартных панелей: admin/structure/pages. Нам нужно включить term_view.

этот term_view не включается, пишет

Page manager module is unable to enable taxonomy/term/%taxonomy_term because some other module already has overridden with views_page.

Что делать? Подскажите пожалуйста.

Г
Гость
18.07.2013

Решение нашёл. Поделюсь, может пригодится:

Just an update, I see the Panel was set to 'Disabled' after enabling the View override, Enabling gives the error:

"Page manager module is unable to enable taxonomy/term/%taxonomy_term because some other module already has overridden with views_page."

Which is OK, but would be nice to know how to set which to use..

I found a work around is to disable the View taxonomy/term/% override and keep it in the Panel content, then it actually shows! kinda nasty hack though as the view is disabled and can't edit it.

A better solution would be a clear way to tell Page Manager which override to use - how can one do that?

 

А по-русски: просто отключить в представлениях стандартный /taxonomy/term/%

В
Варелий
19.07.2013

Niklan, подскажите пожалуйста, как сделать представление непосредственно товару? Заранее спасибо.

N
Niklan
20.07.2013

В смысле? Что именно нужно сделать? Можно вьюху на адрес зацепить node/%, проверять на тип материала и т.д. Можно панелс, можно руками через темизацию. Вариантов вагон и тележка.

Содержимое данного поля является приватным и не предназначено для показа.