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

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

Аватар пользователя 3dmax 3dmax 24 декабря 2018 в 23:02

Всем привет! Прошу совета.
Необходимо создать простые каталоги.

Есть 3 типа нод: 1. Жанр 2. Каталог 3. Песня
Каждый Каталог ссылается через Entity Reference на Жанр.
Каждая Песня тоже ссылается через Entity Reference на Жанр.
Каждая Песня может ссылаться через Entity Reference на Каталог.

Как сделать, чтобы при создании/редактировании Песни можно было выбирать из списка Каталог только из числа тех, что ссылается на тот же Жанр, что и сама Песня? (т.е. чтобы в выпадающем списке были только эти Каталоги)

Что попробовал:

У ноды Песня поле "Ссылка на сущность"
В настройках этого поля в разделе Выбор сущности установил Режим "Представления: Выбрать из представления на основе ссылок на сущность". Выбрано само Представление и Аргумент представления [node:nid]

Настройки самого Представления:
Тип: Ссылка на сущность
Контекстные фильтры: Содержимое: Nid
Связи: 1. Ссылка на сущность: Жанр
2. Ссылка на сущность: Ссылающаяся сущность (Связь - через первую Связь)
Критерии фильтрации: Содержимое: Тип (Каталог)
Поля: Содержимое: Заголовок (Связь - через вторую Связь)

В итоге при создании/редактировании Песни в выпадающем списке пусто.
Что я не так делаю?

Лучший ответ

Комментарии

Аватар пользователя Orion76 Orion76 25 декабря 2018 в 0:38

Если я все правильно понял,
при добавлении НОВОЙ песни, вьюс для выбора Каталога естественно будет "пустым"
а при редактировании СУЩЕСТВУЮЩЕЙ, что-то должен выдавать

Потому что при добавлении новой песни, node:nid еще нет, пока она не сохранена.

Можно сделать все проще и надежнее.

Тут явно прослеживается иерархия:
Жанр - Каталог - Песня
Жанр - Песня

Значит нужен словарь таксономии с 2-мя уровнями иерархии:
1.Жанр1
1.1 Каталог1
1.2 Каталог2
1.3 Каталог3
2.Жанр2
2.1 Каталог1
2.2 Каталог2
2.3 Каталог3

Если сущности Жанр и Каталог нужны только для связи Песен, то тогда они становятся не нужными.
Сущности Жанр соответствует 1-й уровень словаря таксономии
Сущности Каталог соответствует 2-й уровень словаря таксономии

Если все-таки они нужны (например в каждой из этих сущностей индивидуальный набор полей)
то вместо поля entity reference, добавляете поле "Ссылка на термин таксономии" для связи со словарем и через словарь, с другими сущностями.

К сущности Песни так же добавляете поле "Ссылка на термин таксономии" на данный словарь.

Вот почти и все.
Словарь, как бы получается - скелет структуры данных, на который "нанизаны" сущности Жанр, Каталог, Песни.

Осталось только установить виджет SHS ( https://www.drupal.org/project/shs ) для выбора значений из иерархии.
Установить его для полей "Ссылка на термин таксономии" сущностей, и по вкусу настроить.

Аватар пользователя Orion76 Orion76 25 декабря 2018 в 0:48

Кстати, при выборе такой структуры данных, 2-й уровень словаря можно не ограничивать по глубине, тогда каталог получиться с нужной детализацией:
Жанр
- Каталог1
- - Каталог11
- - - Каталог111
и т.п.

Аватар пользователя 3dmax 3dmax 25 декабря 2018 в 12:12

Решено!
Воспользовался предложенным модулем Dynamic dependent fields https://www.drupal.org/project/ddf

Что сделал:

У ноды Песня поле "Ссылка на сущность"
В настройках этого поля в разделе Выбор сущности появился Режим "Представления: Фильтр по представлению ссылки на сущность с динамическими аргументами". Представление прежнее, а вот аргумент представления заменён на предложенный внизу в подсказке, который возвращает нам NID Жанра

И изменил само Представление:
Тип: Ссылка на сущность
Контекстные фильтры: Содержимое: Nid
Связи: нет
Критерии фильтрации: Содержимое: Тип (Каталог)
Поля: Содержимое: Заголовок

В итоге и при создании и при редактировании Песни в выпадающем списке получил Категории только того Жанра, в котором создаю Песню.
У меня стоит модуль Entity reference prepopulate и ссылка и при создании ссылка на Жанр устанавливается автоматически и поле скрыто. Сам не ожидал, что при создании так же получу нужные Категории, но факт - всё заработало как и хотелось.


Всем большое спасибо за советы!!!
И с наступающими праздниками!