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

Всем привет. Решил реализовать каталог на 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
  • Если надо, меняем 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 и добавляем «Дочерние категории». Тоже самое проделайте и с представлением «Товар». Все шаги и настройки после выбора представления просто игнорируйте, они нам не нужны.

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

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

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

Заключение

Плюсы:

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

Оставайся на связи

Будь всегда в курсе новых материалов! Подписывайся на каналы\паблики\рассылки чтобы получать оперативные оповещения.

Комментарии

Г
Гость 04.04.2013 - 02:04

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

А
Анастасия 25.04.2013 - 14:04

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

А
Александр 29.04.2013 - 10:04

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

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

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

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

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

Спасибо!

Ответ на от Niklan

А
Александр 29.04.2013 - 14:04

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

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

А
Антон 04.05.2013 - 22:05

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

Ответ на от Антон (не проверено)

N
Niklan 05.05.2013 - 00:05

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

Ответ на от Niklan

А
Антон 05.05.2013 - 11:05

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

Ответ на от Антон (не проверено)

N
Niklan 05.05.2013 - 12:05

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

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

A
Alex 08.05.2013 - 12:05

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

Ответ на от Alex (не проверено)

N
Niklan 08.05.2013 - 12:05

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

Ответ на от Alex (не проверено)

s
ser_house 11.05.2013 - 18:05

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

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

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

В
Виктор 20.05.2013 - 15:05

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

A
Azat 29.05.2013 - 21:05

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

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

T
Tezzz 07.06.2013 - 21:06

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

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

Спасибо!

Н
Новичок 12.06.2013 - 15:06

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

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

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

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

Ответ на от Новичок (не проверено)

N
Niklan 12.06.2013 - 16:06

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

n
neutrino 13.06.2013 - 01:06

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

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

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

Ответ на от neutrino (не проверено)

N
Niklan 13.06.2013 - 17:06

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

Ответ на от neutrino (не проверено)

N
Niklan 14.06.2013 - 10:06

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

Ответ на от Niklan

n
neutrino 16.06.2013 - 04:06

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

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

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

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

Ответ на от neutrino (не проверено)

N
Niklan 16.06.2013 - 12:06

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

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

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

'catalog_category' => 'catalog_category',

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

Ответ на от neutrino (не проверено)

n
neutrino 19.06.2013 - 03:06

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

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

http://rghost.net/46857450

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

Ответ на от Niklan

n
neutrino 20.06.2013 - 22:06

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

$pane->subtype = 'products';

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

Ответ на от neutrino (не проверено)

N
Niklan 21.06.2013 - 08:06

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

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

R
RB 16.06.2013 - 14:06

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

г
грамблер 07.07.2013 - 21:07

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

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

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

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

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

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

 

г
грамблер 08.07.2013 - 13:07

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

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

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

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

или 

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

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

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

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

Ответ на от грамблер (не проверено)

N
Niklan 10.07.2013 - 12:07

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

г
грамблер 11.07.2013 - 10:07

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

г
грамблер 12.07.2013 - 14:07

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

А
Александр 18.07.2013 - 10:07

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

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

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

http://mysite/catalog/computers/notebooks

После:

http://mysite/?commerce_price_amount=30000

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

В
Варелий 18.07.2013 - 14:07

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

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

Теперь настроим отображение всего и вся. Для начала переходим на страницу стандартных панелей: 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 - 15:07

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

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 - 15:07

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

Ответ на от Варелий (не проверено)

N
Niklan 20.07.2013 - 12:07

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

Добавить комментарий

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