• урок
  • pantey

Создание каталога в Drupal 7. Часть 1

31.07.2013

Продолжаем изучение drupal, а именно сегодня поговорим о том, каким образом можно реализовать каталог . Данная реализация является достаточно сложной для понимания и достаточно объёмная, поэтому данную статью я разобью на 2 части. Под каталогом подразумевается вывод некой структуры, которая у вас может быть реализована с помощью таксономии. Давайте, как всегда разберём этот момент на конкретном примере. В моём распоряжении Drupal 7, который имеет вот такую структуру таксономии:

Так же есть тип материала «Продукция», к которому относится данный словарь таксономии:

И имеем созданные ноды для данного типа материала, каждая нода из которых относится к какому-то дочернему термину таксономии нашего словаря:

Ну вот, с исходными данными мы разобрались, теперь можно поставить задачу

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

Звучит, как-то страшновато, но как говорится «глаза боятся, а руки делают». Приступим: в качестве родительских терминов у нас выступаю термины «Категория1, Категория2, Категория3», а в качестве дочерних терминов выступают «от Подтермин1 до Подтермин6».

Как вы наверное понимаете, для решения данной задачи нам ни как не обойтись без модуля views, который не раз уже упоминался мной в предыдущих статьях, и думаю вы представляете, что он из себя представляет, а так же модуль views_tree, скачать его можно вот отсюда, для чего он нам нужен вы увидите в дальнейшем. Установка такая же как и для всех модулей, сложностей не должно у вас возникнуть. В данной части мы лишь создадим страницу, где будут выведены все термины таксономии из словаря «Каталог» повторяя иерархию его терминов (как раз для этого нам и понадобится модуль views_tree). Приступим (у вас должны быть активированы модули views и views_tree), переходим по пути «Структура -> Представления ->Добавить новое представление» и вводим первоначальные параметры:

  • Имя представления: на ваш выбор
  • Показать: Термины таксономии
  • Типа: Каталог (У вас может быть любой другой словарь)
  • Заголовок и путь для страницы вводим на ваше усмотрение
  • Результат моих настроек смотрим на скриншоте:

И жмём «Продолжить редактирование». Теперь нам необходимо настроить вывод полей для данного представления, для этого в разделе «Формат» пункт «Показать» меняем «Готовая к выводу сущность» на «Поля»

И далее «Применить», в следующем окне настройки оставляем по умолчанию, поэтому так же жмём «Применить», теперь вы можете заметить, что в качестве поля вывода нам стал доступен «Термин таксономии: Имя», это то что нам нужно

Теперь нам необходимо настроить «Отношения» вывода, для этого раскрываем правую панель «Дополнительно»

И кликаем добавить напротив раздела «Отношения»

Далее в открывшемся окне выбираем «Термин таксономии: родительский термин»

И жмём применить, в следующем окне оставляем настройки по умолчанию, поэтому так же жмём применить. С отношениями закончили. Теперь нам необходимо вывести еще два поля для получения ID термина. Для этого в разделе «Поля» кликаем добавить и в качестве параметра поля выбираем «Термин таксономии: ID термина»

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

И далее жмём «Применить». Теперь добавим еще одно такое же поле «Термин таксономии: ID термина»

Жмём «Применить», и в следующем окне, мы так же уберем галочку с «Создать метку», но в пункте «Связь» выбираем «Родитель»

И жмём «Применить». Теперь изменим «Формат » вывода с «неформатированный список» на «Tree» (данный вывод нам как раз и предоставляет модуль views_tree). Для этого кликаем по пункту «Неформатированный список» в разделе «Формат»

И меняем его на «Tree»

И жмём «Применить». Теперь нам необходимо настроить данный вывод, меняем значение «Main field» и «Parent field» на значения, которые берутся из выводимых полей

И жмём применить. В качестве значения «Main field» должно выступать поле первое созданное поле (Термин таксономии: ID термина), а в качестве значения «Parent field» должно выступать второе созданное поле ((Родитель) Термин таксономии : ID термина). Теперь давайте исключим из вывода два этих поля, для этого открываем на редактирование сначала одно поле (Термин таксономии: ID термина) и ставим галочку «Исключить из вывода»

И тоже самое проделываем для другого поля ((Родитель)Термин таксономии: ID термина). (Данные опции можно было расставить и при создании этих полей). Теперь нам осталось лишь добавить ссылку на эту страницу в главное меню сайта, для этого в разделе «Настройки страницы» в пункте «Меню» кликаем по «Без меню»

И далее выбираем «Обычный пункт меню»

Где нам необходимо вписать «Заголовок» и «Описание» пункта меню

А так же в каком меню данная ссылка должна появиться, в моем случае это «Главное меню»

И жмём «Применить». Теперь сохраняем представление и переходим на наш сайт и видим, что нам стала доступна ссылка «Каталог продукции»:

По клику по которой мы увидим вот такую картину:

Это то, что нам и требовалось. Но в данном выводе есть один существенный недостаток, если мы кликнем по термину «Категория1», а к нему у нас не привязаны ноды, так как он у нас в таксономии используется лишь для обозначения категории продукции, то мы увидим вот такую картину:

Хотя по правилам каталога мы должны получить страницу с подкатегориями, в данном случае это «Подтермин1, Подтермин2 и Подтермин3». Как избавится от такого не правильного вывода я вам расскажу в следующей части, а пока на этом всё.

-->
Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

Комментарии (13)

Profile picture for user Алексей
Николай
04.10.2013

А как можно вывести для отображение во вьюс содержимое(body) или описание для нескольких категорий в каталоге?

Profile picture for user pantey
pantey
11.10.2013

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

Profile picture for user Алексей
Smile__nik
14.10.2013

Многоуважаемый автор!
Подскажи пожалуйста как этот список вывести табами, так что бы отображались все материалы категории?
ПОЖАЛУЙСТА!!!

Profile picture for user Алексей
vsenetak
07.01.2014

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

Profile picture for user Алексей
Виктор
07.01.2014

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

Profile picture for user Алексей
Макс
26.02.2014

Подскажите, как все это дело темизиркется?
В частности нужно вывести ссылку на родителя в

, а после каждого третьего

  • родительского списка добавить li class="clearfix". Словарь большой и нужно вывести сеткой в три столбца.
  • Profile picture for user pantey
    pantey
    26.02.2014

    а это уже как вам угодно, хотите переопределяйте views шаблон, можно попробовать использовать views_grid, можно css 3 - он так же позволяет выводить элементы сеткой и плюс jquery

    Profile picture for user Алексей
    Ирина
    10.04.2014

    Добрый день,
    У меня на ОДНОМ уровне меню есть и термины и простые ссылки на ноды (не прикрепленные к терминам). Как вывести при нажатии на пункт меню не только термины, но и ноды (не те, что к термнам прикреплены, а ноды, не имеющие термина вообще)? Я добавляла Отношение Термин таксономии: Материалы с термином, но в результате начали выводиться только эти ноды без термина, при том, что в Критериях фильтрации также был и Термин таксономии: Словарь (...) наряду с (материал) Содержимое: Заголовок (= ).
    Заранее благодарю,

    Profile picture for user pantey
    pantey
    11.04.2014

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

    Profile picture for user Алексей
    Ирина
    11.04.2014

    Благодарю за ответ. А вообще Вы сталкивались с реализацией иерархической карты сайта, в которой есть не только термины и указано кол-во нод, прикрепленных к этим терминам, но и ссылки на эти ноды? - фактически как в меню-в меню же любые ссылки фигурируют (эта схема нужна для отображения списка ссылок и терминов и нод при нажатии на ту или иную ссылку в хлебных крошках (термины можно без нод, прикрепленных к ним, и ноды, которые находятся на одном уровне с терминами, но не прикреплены к терминам). Я пока вижу единственный способ задать каждой такой ноде без термина личный термин и убрать ссылку на ноду из меню, оставив только ссылку на термин, который в свою очередь при нажатии выведет ссылку на ноду.

    Profile picture for user pantey
    pantey
    11.04.2014

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

    Profile picture for user Алексей
    Наталья
    25.02.2016

    Голова стала квадратной)) Но это просто шедевр!!! Спасибо за такую классную инструкцию, сохранила целый день времени =) !

    Profile picture for user Алексей
    Pavel
    16.05.2016

    Добрый день! Спасибо за интересную статью!
    Подскажите,как в самом первом представлении сделать, что бы выводились только термины первого уровня. То есть:
    Категория1
    Категория 2.

    без ПОДКАТЕГОРИЙ на этой странице..
    Заранее спасибо!!