Ограничьте параметры при создании контента в соответствии с выбранным значением
У меня есть три типа контента, Events
, Disciplines
и Championships
. Event
имеет ссылку на сущность s на Disciplines
и Championships
и Championship
имеет ссылку на сущность Disciplines
.
----- 1..n 1..n ------------
|Event|------------|Championship|
----- ------------
|0..n |0..n
| |
| |
|1..n |
---------- 1 |
|Discipline|-----------/
----------
Когда пользователи создают новые Event
узлы, они сначала выбирают, какие Disciplines
задействованы, из списка флажков, а затем аналогичным образом задействованы Championship
(ы).
На данный момент отображаются все Championships
узлы, позволяющие пользователям потенциально выбирать Championships
для Disciplines
, которые не являются частью Event
.
Можно ли использовать модуль условных полей для создания зависимости для отображения только Championships
, где поле дисциплины Championship
соответствует Discipline
(ам), выбранному при срабатывании зависимости?
Как можно было бы заполнить "Набор значений" в модуле "Условные поля"?
Например, при создании Event1
я выбираю DisciplineA
и DisciplineB
. Список Championships
должен содержать только те, которые имеют DisciplineA
или DisciplineB
ассоциации и не содержат никаких Championships
которые не имеют правильных ассоциаций
Если бы event.дисциплины были списком выбранных дисциплин, я бы хотел что-то в этом роде (с динамическими аспектами условных полей)
SELECT championships c WHERE c.discipline IN (event.disciplines)
Редактировать
Зависимые поля, похоже, делают то, что мне бы хотелось, но версии D7 нет...
Редактировать 2
Немного изменил структуру.
Я полагаю, что Discipline
не нужно было быть сущность сама по себе и создали вместо этого дисциплину словаря таксономии с терминами для каждой дисциплины. Event
и Championship
теперь имеют ссылки на один и тот же термин field_discipline
.
С помощью модуля Опция ограничения поля ссылки ссылка на сущность Championship
в Event
имеет выбранную опцию "Ограничить параметры этого поля в соответствии с соответствующими значениями полей", а соответствующее поле discipline (field_discipline)
.
При создании Event
список Championships
пуст, но когда я выбираю Discipline(s)
ожидаемые Championships
не появляются.
No options are available for the current form values. Try selecting different values for the following fields: discipline.
Редактировать 3...
Firebug предположил, что ajax на самом деле срабатывал не для флажка/переключателя, а для меню выбора. Применен этот патч , и раздел теперь обновляется, но по-прежнему не находит никаких значений. Есть соответствующие узлы Championship
, которые нужно найти.
Редактировать 4!
В узлах Championship
не были выбраны таксономии дисциплин...
2 answers
Я разобрался с этим (в конце концов...)
Вместо того, чтобы использовать Discipline
в качестве типа контента (поскольку на самом деле он сохранял только имя) Я создал словарь таксономии под названием Дисциплина и добавил все соответствующие названия дисциплин в качестве терминов.
Удалены ссылки на сущности Discipline
в Event
и Championship
. Добавлена ссылка на термин (field_discipline
) в Event
и та же ссылка на термин Championship
.
Используя модуль ограничения ссылочных параметров (и исправление; см. Вопрос) в ссылка на сущность в Event
к Championship
добавила "Ограничить параметры этого поля в соответствии с соответствующими значениями полей" и выбрала соответствующее поле field_discipline
.
Итак, теперь при создании узла события пользователю предоставляется список флажков для выбора задействованных дисциплин, и когда каждая выбрана, соответствующие чемпионаты добавляются в список доступных чемпионатов.
Другой способ, который я нашел для этого, использует ссылки на сущности, ограничение параметров ссылок и модули представлений.
----- ----
|Event|-------------|Race|
----- 1..* 1..* ----
*| |*
| |
1 | |
--------- 1 |
|Organiser|------------/
---------
Event
состоит из Races
Organiser
может организовать Event
(ы) и/или Races
в соответствии с событием двух логических полей? а Раса? в типе контента Organiser
.
При создании, например, узла Event
мы хотим, чтобы только возможные варианты были теми Organiser
узлами с событием? поле имеет значение "истина".
Предполагая, что типы контента уже определены, с Event
имея ссылку на сущность Orgainser
, сначала создайте новое представление...
В этом случае я назвал представление "Организаторы мероприятий - Параметры ограничения" и установил для него значение показывать содержимое типа Organiser
. Снимите флажок Создать страницу, затем нажмите Продолжить и редактировать.
В пустом главном представлении нажмите +Добавить и выберите "Ссылка на сущность".
Добавить событие поля? в ПОЛЯ
В настройках формата выберите событие? поле.
В КРИТЕРИИ ФИЛЬТРАЦИИ добавить событие? и установите Оператор в is one of
и выберите true
из параметров .
Затем отредактируйте поле Ссылки на сущность в типе контента Event
, который ссылается на тип Organiser
.
Выбор сущности в режиме выберите "Представления: Фильтр по представлению ссылки на сущность", затем выберите вновь созданное представление.
Это, очевидно, применимо к любому варианту использования и кажется достаточно простым способом осуществлять. Я сделал почти то же самое, чтобы ограничить количество доступных организаторов гонок.
Надеюсь, это кому-то поможет, я довольно долго ломал голову над этим...