Drupal 8 - Таксономия и представления

Главные вкладки

Аватар пользователя Kaylang Kaylang 24 декабря 2017 в 21:41

Приветствую тебя, всезнающий All!

Вероятно, вопрос нубский. Тем не менее рискну задать, ибо не нашёл я внятного ответа на просторах инета (может не там или не так искал).

Ситуация такая: на сайте необходимо размещать материалы из выпускаемого нашей волонтёрской ассоциацией журнала. Надо, чтобы в блоке (на главной и некоторых других страницах) выводился список N последних журналов (пусть будет 5) в виде фотографии обложки и анонса. Далее, надо, чтобы открывалось оглавление выбранного номера (список ссылок), а в оглавлении уже ссылки на сами статьи

Создал в словаре термин "Журнал" и к нему дочерними элементами "Номер 1", "Номер 2" и т.д.
Создал типы материала "Статья журнала" и "Анонс журнала".
Сделал представление в блоке для вывода Анонсов в блок и... упёрся в стену.
По задумке, страница с оглавлением должна генерироваться представлением. Но возник вопрос, а как собственно, представление узнает, к какому именно номеру должно генерировать список ссылок на статьи?
Из блока вывода Анонсов сделал, чтобы ссылка на каждый номер была вида: /journal/Номер_журнала/contents.
Пришлось повозиться, чтобы заставить вставлять в ссылку Номер_журнала из словаря таксономии.
А теперь не могу понять, как выцепить этот номер и дать команду вьюшке, чтобы генерила ссылки на статьи из указанного номера.

Посему обращаюсь к знающим за помощью, растолкуйте пожалуйста.
Может я что-то делаю неправильно?

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 25 декабря 2017 в 8:01
1

Словари:
Журнал -> Номер
Материалы:
Статья журнала (анонс отдельно не надо материалом, можно использовать анонс для показа из статьи)
поле: entity_reference на термин словаря журналы с обязательным выбором номара например используем https://www.drupal.org/project/cshs

Настройка алиасов путей - https://www.drupal.org/project/pathauto
Для списком -> представления -> включить taxonomy/term/%
Теперь у Вас есть страницы журналов и номеров.
На странице для журналов можно вывести дополнительно attachment для терминов номеров журналов, а можно просто использовать блок например https://www.drupal.org/project/hierarchical_taxonomy_menu

Аватар пользователя Kaylang Kaylang 25 декабря 2017 в 11:18

Благодарю за ответ!
Анонс журнала используется для краткого описания номера и фотографии обложки, а для статей отдельного анонса нет.

Но всё-таки хотелось бы понять, как можно передавать аргументы вьюшкам.

Отдельная благодарность за наводку на модули. Pathauto уже стоит, а остальные два попробую в деле.

Вот ещё хотел спросить по поводу настройки пути во вьюшках. Точнее по использованию знака "%" и стандартно используемых переменных типа "%taxonomy_term", где можно найти список всех используемых переменных?

Аватар пользователя Kaylang Kaylang 25 декабря 2017 в 19:07

Не получилось, как я хотел. Пришлось просто тупо создавать вьюшку для каждого номера журнала, чтобы выводить оглавление.
Так и не понял, как сделать, чтобы одна вьюшка выводила заголовки статей в номере, в зависимости от передаваемого ей параметра, чтобы путь имел вид: /journal/номер_журнала/contents или, хотя бы /journal/номер_журнала.

Аватар пользователя Kaylang Kaylang 26 декабря 2017 в 10:16

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:

Парметр принимается через contextual filter. см. пример taxonomy/term/%


Вот в это я так и не въехал. Sad

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

Честно говоря, хочется плюнуть на 8-ку и попробовать быстро сделать на 7-ке. Модуль Insert нормально не работает, плагины CKEditor либо не подключаются, либо через зад работают. Времени немного и некогда разбираться с внутренностями.

Аватар пользователя Kaylang Kaylang 26 декабря 2017 в 11:53

В очередной раз благодарю за желание помочь!
В таком виде с контекстными фильтрами я разобрался немного раньше, но не могу понять, как это согласовать с ЧПУ.

Дабы не плодить тем, попробую более подробно здесь пояснить ситуацию.

Термины таксономии: "Журнал" - tid = 28/синоним url = "/journal", "Номер 1" - tid = 29/синоним url = "/journal/1_2017", "Номер 2" - tid = 30/синоним url = "/journal/2_2017".
Типы материалов: "Анонс журнала", "Статья журнала"

Создал вью "Анонс журналов". Блок+страница. Вывод полей "Обложка", "Текст", "Термин таксономии"(на оглавление). Фильтрация по типу материала "Анонс журнала". Странице присваиваю путь "/journal".
Ещё две вьюхи для оглавления номеров. С url'ами страниц "/journal/1_2017" и "/journal/2_2017"
В результате по ссылке мой_сайт/journal выводит превью всех материалов, имеющих термин таксономии "Журнал", независимо от типа материала.
Ладно. Убираю синоним url у терминов таксономии. По ссылке начинает выводить как мне надо. Подключаю модуль Redirect и добавляю перенаправления с /taxonomy/term/28 на /journal, с /taxonomy/term/29 на /journal/1_2017 и с /taxonomy/term/30 на /journal/2_2017. Вроде работает, но в превью анонсов, ссылка на оглавление при наведении мышой отображается в виде "/taxonomy/term/29" и "/taxonomy/term/30".
Это напрягает.
Во-первых, хотелось бы сразу видеть как надо.
Во-вторых, делать для каждого номера вьюху для оглавления и перенаправление тоже совсем не айс.

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

Думается мне, что я просто не в том направлении копал всё это время. Где-то есть простое, но эффективное решение.

Извините, что "нагрузил".

Аватар пользователя Kaylang Kaylang 26 декабря 2017 в 13:42

В Drupal 7 в контекстных фильтрах можно было вставить свой PHP скрипт, а в восьмом этого нет. Возможно в семёрке это было реализовано только модулем Views PHP, но работало, а для восьмёрки этот модуль не реализован. Sad

Есть пункт "Параметр запроса", но непонятно какой запрос можно туда всунуть и пока не могу найти вразумительную инфу.

Аватар пользователя sas@drupal.org sas@drupal.org 26 декабря 2017 в 15:16
1

В 8-ке php фильтры не любят нигде, по причине небезопасности,
впрочем как и в 7-ке, что касается алиасов их всегда можно преобраовать в нужные идентификаторы и обратно,
опять таки пример с taxonomy/term/% для контекстуального фильтра там используется идентификатор термина,
но каждый термин имеет алиас по которому и работает views покопяйте контекстуальные фильтры
в части валидаторов и и конролллеров,
посмотрите как сделан views -> taxonomy/term/% ,
если ничего не найдете тогда надо добавить свой контроллер для контекстного фильтра,
благо в 8-ке проще и быстрее благодаря включения её в ядро и использованию симфонии и ООП.

Аватар пользователя Kaylang Kaylang 26 декабря 2017 в 16:56

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:

покопяйте контекстуальные фильтры

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

Добавил для терминов "Номер 1" и "Номер 2" в поле "Описание" номера журналов по шаблону "номер журнала_год" (1_2017 и 2_2017). Во вьюшку Анонса добавил связь по термину из поля "Номер журнала" в материале "Анонс журнала".
В фильтрах вывода полей добавил поле "Описание->Термин таксономии".
Во вкладке "Перезаписать результаты", среди Подстановочных шаблонов появился "{{ description__value }}". Если выводить его текстом, то выдает как надо "1_2017", если делать из него ссылку, то добавляет символ подчёркивания "/1_2017_".
Вот как с таким бредом бороться? Sad