Рейтинг:2

Как изменить вид за виджетом выбора в обычной форме редактирования узла

флаг sa

У меня есть поле entity_reference в типе контента: field_node_ref

В определении поля он может ссылаться на все узлы данного типа.

Виджет, используемый для этого поля, представляет собой Выбрать виджет

В зависимости от контекста в форме редактирования узла я хотел бы использовать разные представления для заполнения #параметры принадлежащий Выбрать виджет.

Бывший:

Контекст A --> View A будет использоваться

Контекст B --> View B будет использоваться

Контекст вычисляется в моей бизнес-логике (я говорю об этом, чтобы показать, что можно использовать несколько представлений, а затем его нельзя закодировать в определении поля)

В my_module_form_alter в #параметры уже заполнены, и я не могу обновить массив виджетов select, чтобы заполнить их пользовательским представлением. Я предполагаю, что я должен зацепить раньше, но я не знаю, как.

флаг cn
На чем основаны различные контексты? Это может иметь значение для лучшего подхода
Baud avatar
флаг sa
@Clive: они основаны на значении поля конечного автомата; которое является другим полем редактируемого узла. В зависимости от состояния/фазы/статуса редактируемого узла мне нужно использовать представление A, B или C для заполнения #options моего виджета выбора.
Рейтинг:2
флаг in

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

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

В большинстве случаев вы строите фильтр по идентификатору объекта, и задача вашего фильтра состоит в том, чтобы выяснить, должен ли этот элемент отображаться или подавляться. Встроенные в Drupal «Идентификатор контента из URL-адреса» и «Идентификатор термина таксономии из URL-адреса» являются примерами таких фильтров. Ваш фильтр просто должен включать больше логики, чем просто сравнение идентификаторов.

Затем в настройках поля ссылки на объект измените Эталонный метод к Представление: фильтрация по представлению ссылки на сущность.

Baud avatar
флаг sa
Это хорошая идея. Я подожду, если кто-то не предложит лучший совет, прежде чем принять этот ответ. Я ожидал, что очень ранний хук легко заменит используемый вид (как мы можем сделать с виджетом автозаполнения).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.