Рейтинг:0

Как предоставить массив значений из поставщика контекста

флаг in

Я изучаю создание собственного поставщика контекста, в частности, для предоставления «групп текущего пользователя». Я создаю это для другого плагина, плагина условий, целью которого является фильтрация вещей (например, блоков) на основе групповых ролей текущего пользователя.

Я знаю, что существуют следующие проблемы и исправления, которые меня куда-то приводят:

Однако оба патча касаются только одна группа, т. е. поставщик контекста по существу выбирает только первую группу, к которой принадлежит пользователь, а подключаемый модуль условия предоставляет одну группу для оценки. Я хотел бы, чтобы поставщик контекста предоставлял несколько групп (все группы, к которым принадлежит пользователь), а подключаемый модуль условия принимал несколько групп.

Но как предоставить и использовать массив значений в качестве значения контекста?

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

Рейтинг:3
флаг fr

Начнем с этого:

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

Хотя это правда, помните, что предоставляемое «единственное значение» является объектом, а не примитивным типом. В случае поставщика контекста группы это «единственное значение» является объектом Entity типа «группа». Сам объект содержит все обычные данные — идентификатор, метку, описание, дату создания, автора, базовые поля и т. д. Так что неправильно думать об этом только как об одном числе.

Чтобы предоставить массив значений, вам нужно вернуть объект, представляющий структуру данных, а не Entity. Основной API типизированных данных определяет множество типов данных, из которых тип карты, вероятно, лучше всего подходит для ваших целей.Карта содержит набор значений, похожий на знакомый ассоциативный массив в PHP.

Таким образом, схема решения состоит в том, чтобы создать свой собственный поставщик контекста, скопировав существующий поставщик контекста группы, изменить свою копию так, чтобы вместо создания определения контекста сущности вы создали определение контекста карты, а затем добавить значения, которые вы хотите предоставить в свой Карта.

Если вам нужна дополнительная функциональность, вы можете создать свой собственный тип данных (я рекомендую для этого создать подкласс Map) и предоставить объект этого типа данных вместо Entity или Map.

Вы можете найти краткий пример того, как написать свой собственный провайдер контекста здесь: https://www.drupal.org/docs/contributed-modules/rules-essentials/for-developers/providing-global-context-variables

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

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