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

24.03.2013 118 4 мин.

Всем привет. Решил реализовать каталог на 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 из словаря «Категории каталога» будут более информативными.

Комментарии

Ю
Юрий # 24.07.2013 - 01:16

Спасибо за отличную статью. Единственное столкнулся с проблемой хлебных крошек. Не совсем понимаю как правильно настроить Path Breadcrumbs

Ю
Юрий # 24.07.2013 - 02:35

Таки разобрался самостоятельно. Создал в Path Breadcrumbs два правила - одно стандартное для таксономии, второе для типа товара. Если кому надо могу экспортнуть.

N
Niklan # 24.07.2013 - 11:17

Конечно экспортируйте, тут многие запутались именно с хлебными крошками.

Ю
Юрий # 24.07.2013 - 18:27

У меня каталог находится по адресу /katalog 

В Path Breadcrumbs создал два правила:

1. для таксономии http://pastebin.com/BN2NCgzX

2. для типа материала Product http://pastebin.com/LCGbUQK8

Не уверен, что это самый изящный вариант, но работает правильно)

Д
Дмитрий! # 24.07.2013 - 15:18

Отличная статья!
А у меня вот такая тема:

Некликабельная главная категория (1 вьюха)

 - некликабельная 1 подкатегория (2 вьюха)

- - кликабельные 10-15 категорий

Я вот думаю...как это всё дело соединить, что бы отображалось на главной странице каталога. Получается вложенность 3 степени (причём первые две, идут как просто заголовки). Колдую с Views, и как-то не оч получается. Наверное нужно с Panels колдовать? Есть идеи?

z
zepa # 19.08.2013 - 18:54

Здравствуйте! Отличная статья!
Сделал так как предложенно и все заработало как и должно.
Попытался настроить  вывод подкатегорий и чо то затупил как имменно настроить вьюхи для вывода подкатегорий.Если я правильно понял из вашего коммента ранее, нужно добавить еще  вьюхи  которые и будут управлять выводом подкатегорий. Для этого нужно создать столько вьюх сколько подкатегорий и каждую  привязать к своей подкатегории. И если это так то в Show Taxonomy terms of type «Категории каталога» вместо  «Категории каталога» должны быть подкатегории, а у меня там только верхний уровень, то есть «Категории каталога».
Помогите разобраться пожалуйста.
О! И еще при попытке импортировать готовую вьюху "Категории каталога" пишет Unable to interpret view code. Это из-за чего может быть.

N
Niklan # 20.08.2013 - 09:31

О! И еще при попытке импортировать готовую вьюху "Категории каталога" пишет Unable to interpret view code. Это из-за чего может быть

Из-за того что вы не изменили код импортируемой вьюхи. Там нужно указать машинные имена своих словарей.  В одном из комментов это уже обсуждалось.

На счет подкатегорий не совсем понял. Да, главная страница с подкатегориями сделана на другой вьюхе.

t
taras # 23.09.2013 - 17:38

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

К
Кирилл # 29.10.2013 - 00:10

Здравствуйте, Niklan. Спасибо большое за статью, очень помогла, но есть один вопрос. Как сделать что бы последний элемент (в частности страница с контентом) из цепочки подкаталогов имела такой урл www.mysite/node/1, сейчас у меня выводится в виде www.mysite/taxonomy/term/1. Т.е что бы выводился урл самой ноды.

N
Niklan # 29.10.2013 - 00:15

На днях напишу как сделать хлебные крошки и пути для материалов и терминов с иерархией.

Чтобы например было: Каталог -> Электроника -> Компьютеры -> Ноутбуки -> Название

К
Кирилл # 29.10.2013 - 00:23

То есть я так понимаю, сделать урл что бы ссылался на ноду быстро так не делается? Если бы все же смогли обьяснить хотябы, где что подправить был бы вам очень признателен или в двух словах не скажешь?

Г
Гость # 31.10.2013 - 19:03

Спасибо, разобрался! Я при создании views товара поставил displays не content pane а master. Когда поменял, все заработало. Возник тут другой вопрос. Как сделать так что бы в корневом каталоге были элементы views товара, которые не имеют никакой категории.

S
Svetozarrr # 14.11.2013 - 04:49

Большое спасибо за подробный гайд)

Г
Гость # 13.12.2013 - 16:50

Здравствуйте, спасибо за каталог, но у меня возникла проблема с открытыми фильтрами, добавляю  обычным способом,   появляются поля с выбором и кнопкой  искать, жмем искать  - результат - выкидывает на основную страницу сайта

Г
Галина # 13.12.2013 - 17:05

В каталоге http://www.kudazvonit.kz/ads/nedvizhimost

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

N
Niklan # 13.12.2013 - 17:24

А у представления где используется фильтр адрес то какой указа? должен быть taxonomy/term/%

Во вложении такого бага быть не должно, ибо тут почему-то в форме подставлен урл главной страницы. Косяк на каком-то шаге был 100%
 

В
Виталий # 16.12.2013 - 16:46

Хелп. Туплю на этом месте:

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

где искать регион center (в блоках?)

С
Степан # 12.01.2014 - 11:44

Спасибо, Очень помогла статья

м
макс # 26.01.2014 - 22:35

Не совсем в тему этого урока, за который Вам отдельная благодарность, но очень близко.

Будьте добры, помогите.

Есть Views c включенным Master дисплеем для общих настроек и добавлены страницы, к примеру: Бани, Дома, Бытовки, Большие дома. У каждой из страниц свой /path. В filter criteria выбран нужный content type(строения), создан словарь таксономий с вариантами(дома, бытовки, бани и большие дома) НО! Когда я добавляю filter criteria по таксономии к странице, например, Бань, он дублируется на все остальные страницы(дома бытовки итд). А мне нужно что бы конкретные строения выводились на конкретных страницах, может я чего-то не так делаю? Но делать 4 вида Типов контента не хочется.

м
макс # 26.01.2014 - 22:38

Разобрался! В самом верху нужно было выбрать не All displays, а This page(override)

Г
Гость # 30.01.2014 - 21:28

Спасибо, все получилось! Но как только я начинаю переходить на дочерние категории в главном меню появляется пункт Taxonomy Term при переходе по нему выдает "Запрашиваемая страница "/taxonomy/term/%25" не может быть найдена." ...причем только при просметре терминов ... откуда она может вылазить?...

В
Валерий # 12.02.2014 - 14:06

На странице дочерних категорий проставляется цифра 1. Откуда она берется и как ее убрать? Тоже самое и на странице товара.

N
Niklan # 13.02.2014 - 00:42

Такого не должно быть. Перепроверьте все конфиги. Может где-то вызов пееменной идет? Но явно не во вьюсах.
 

T
Tsu # 13.02.2014 - 09:33

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

Подскажите пожалуйста, куда добовлять необходимые категории? Создавать каждый отдельный словарь с названием категории?

N
Niklan # 13.02.2014 - 11:29

Создаете словарь "Категории каталога", а затем туда и добаляете категории. Просто жмем "Добавить термин (Add term)" и пишем, например "Компьютеры и ноутбуки" и т.д.
 

Т
Тарас # 15.02.2014 - 14:18

Здравствуйте. Такой вопрос, когда добавил сортировку для пользователей, после выбора по чем сортировать перекидывает на главную с параметрами сортировки "/?sort_by=sell_price&sort_order=DESC" а должно быть /taxonomy/term/7?sort_by=sell_price&sort_order=DESC . C ajax все нормально работает (но мне не подходит с аякс, потому что в нем если открыть вторую страницу потом перейти на ноду, и нажать назад - оно переходит не на вторую страницу что была открыта а на первую). Спасибо

R
Richi # 19.02.2014 - 21:34

Спасибо огромное за статью. Все подробно и внятно описано. И решение очень удачное

O
Olechka # 27.02.2014 - 15:21

Здравствуйте уважаемый Гуру. Я только учусь. Использую Drupal 7 на локалхосте.

Сделала каталог, как у вас написано. Все получилось. Спасибо,  но мне не очень подошло.

Может это вопрос глупый, но нигде не нашла ответа.

Создала таблицу во Views с фильтрами - выпадающие списки (по урокам на сайте Podrupalim.com)

Потом решила вставить эту таблицу в Панель. И она встала! Выбрала цвет, украсила ))).

Но, когда я выбирала из выпадающего списка значение и нажала на кнопку "Применить" появляется таблица без панели(((.

Думаю, что проблема может быть в путях, пыталась методом подбора ставить подстановки в page manager. Пыталась node/%node в Панелях.
Но так ничего и не получилось.

Просмотрела несколько сайтов: xandeadx.ru; drupaler.by; nodeone.se и еще несколько. Но по этому вопросу ничего не нашла или не поняла.

Вопросы:
1.Каким способом для меня лучше выводить таблицу с фильтрами созданную во Views, чтобы она всегда отображалась в выбранной панели.
2.Можно ли изменить название кнопки "Применить" на "Поиск"

Заранее огромное спасибо.

 

N
Niklan # 27.02.2014 - 15:35

1. Делать таблицу в качествей Panles pane (во вьюсах такое есть), а уже его вставлять в panels. Они более корректно вместе работают. Можно также Attacment использовать. В связке с Panels надо не страницы делать, так как Panles отвечает за страницы и урл, и если вы в панели вставляете views, это должно быть вложение без url, а это attacment, block, pane. А уже из panels можно передавать значение во views если это необходимо.

2. Можно, не скажу точно как, но можно. Мб во всюсах, может еще где ;) Я бы хуком менял.

К
Кирилл # 19.03.2014 - 17:45

Здравствуйте, Niklan! Сделал уже не один каталог по вашему методу, большое вам спасибо за это, но тут при очередном задании возникла усложненная задача, нужно выводить элементы каталога со списком дочерних, например:

Категория 01             Категория 02            Категория 03

подкатегория 1.1       подкатегория 2.1      подкатегория 3.1

подкатегория 1.2       подкатегория 2.2      подкатегория 3.2

подкатегория 1.3       подкатегория 2.3      подкатегория 3.3

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

М
Марат # 09.04.2014 - 13:30

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

Р
Роман # 14.04.2014 - 23:45

Niklan, отличная статья, спасибо

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

A
AVIA.LINK # 16.04.2014 - 06:52

офигигительнон полезный тутор! респект автору!

пока все работает :) буду дальше тестировать

з.ы. вернулся на родной друпал :)

S
ScentTiger # 24.04.2014 - 16:09

спс за урок, все получилось, вопрос, как можно в категориях вставить кроме названия категории картинку?
 

S
ScentTiger # 25.04.2014 - 04:41

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

Т
Тимур # 17.07.2014 - 14:33

Молодец, полезно.
Офтоп: лучше убрать из крошек повторение тайтла ;)
Кашерней с точки зрения SEO

Е
Евгений # 27.07.2014 - 08:43

Столкнулся с проблемой, на шаге "Настройка Panels": в Variant Type нету Panel!(( Помогите пожалуйста!

И
Игорь # 14.08.2014 - 13:21

Огромное спасибо за статью!
Всё получилось, категории показываются.
Но неожиданно столкнулся с глупейшей, наверное, проблемой - как, собственно, добавлять новый товар? Как Article?
Заранее спасибо за ответ.

X
XAHTEP26 # 21.08.2014 - 22:20

Спасибо большое за статью. Я только начинаю работать с Drupal и данная статья мне очень помогла с первым сайтом. Если можно подскажите пожалуйста как сделать чтобы выводился сразу весь список категорий с подкатегориями и товарами в них в виде многоуровневого списка. Я хочу из него меню сделать. Или это лучше както подругому реализовать?

Б
Борис # 27.08.2014 - 15:46

При выводе материала в категорию, если нет материалов, Contextual filters выставлен на 0, соответственно отображает что материалов нет. Как сделать чтобы это отображалось только в самой последней вложенной категории? Потому что в родительских это совсем никчему.

A
Aectann # 28.08.2014 - 11:10

Проблема с отображением каталога. Все разделы есть. Товары тоже выводятся. Но если зайти не залогиненым то разделы видно а товары нет.

R
Redik # 24.10.2014 - 13:13

создал views. с воводом товаров.
вывел фильтр для выбора категории товара. НО на вьюшке товары то выводятся ВСЕ. или не все, а опр количество (как настроишь). у меня встала задача выводить товары вот так.

список категорий
|— — — — — — — — — — — — — — — —
|первая категория
| — — — — — — — — — — — — — —
| 4 товара 1й категории «1» «2» «3» «4» или слайдер
| — — — — — — — — — — — — — —
|2я категория
| — — — — — — — — — — — — — —
| 4 товара 2й категории «1» «2» «3» «4»
|— — — — — — — — — — — — — —
|3я категория
|— — — — — — — — — — — — — —
| 4 товара 2й категории «1» «2» «3» «4»

собственно в коммерсе они так и выводятся, но я недопонимаю как это там реализовано.
пробыую в настройках формата группировать поля по категории (вывел поле категории скрытым), но показываются все-равно ВСЕ товары.
помогите пожалуйста разобраться, как сделать вывод каталога как на схемке? т.к. такой вид каталога (на мой взгляд) наиболее приемлем. может это даже будет отдельной статьей)
спасибо за время.

Д
Денис # 21.01.2015 - 23:34

Спасибо за статью.

Столкнулся с проблемой. Во вьюхе со списком товаров товары выводятся только для админа. Для анонимов список пуст...

Даже не знаю куда копать...

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

В комментариях присутствует поддержка Markdown синтаксиса. Показать подсказку.
Ссылка
[Заголовок](http://google.ru)
Код в строку
`print "Hello World";`
Многострочный код
```php print "Hello World"; ```
Жирный текст
*Текст*
Курсивный текст
_Текст_