Доступ к данным объекта (контента) в условиях правил - странное поведение

Я довольно новичок в drupal, но так как друг попросил меня помочь ему, я немного в него вник. Мне удалось заставить многие вещи работать, но есть одна проблема, с которой я не могу справиться. Вот чего я пытаюсь достичь:

Курсы будут представлены в виде группы OG с сущностью Node. Каждый курс имеет тип контента «Курс» (сущность типа «Узел») и имеет свою цену. В правилах я пытаюсь проверить, достаточно ли у пользователя кредита, чтобы присоединиться к курсу, таким образом запуская его в событии «Перед сохранением членства в og». Если у пользователя недостаточно средств, я хочу прервать сохранение членства в ОГ и выдать какую-то ошибку.

Довольно просто, но все же есть некоторые проблемы, которых я не ожидал. Вот что я делаю/имею:

  • у каждого пользователя есть настраиваемое поле под названием «field-credit», с этим нет проблем, так как я могу получить к нему доступ через site:current-user:field-credit в любое время и в любом месте в правилах.
  • курс — это не что иное, как простая группа OG с сущностью Node с настраиваемым типом контента «Курс», в которой определено настраиваемое поле «цена поля» для хранения цены курса.

В модуле «Правила» (через пользовательский интерфейс) я делаю такое правило:

  1. запуск по событию «Перед сохранением членства в og»
  2. Conditions are as follows (in that order):
    • Entity [og-membership:group:entity] is of type Node (ensuring I can access content type)
    • Контент [og-membership:group:entity] относится к типу Course (чтобы я мог получить доступ к определенным полям курса)
    • Сравнение данных: [site:current-user:field-credit] ниже, чем [og-membership:group:entity:field-price]

И вот что-то, чего я не могу полностью понять - после добавления этих условий (тип объекта, чтобы сказать, что я работаю с узлом, и тип содержимого узла, чтобы сказать, что я работаю с курсом), я могу видеть все поля, которые мне нужны, в селекторе данных, таким образом, предполагается, что Правила знают о них и используют их. Но на самом деле их нет! Когда я показываю сообщение с [og-membership:group:entity:field-price] в нем (которое все еще доступно через селектор данных), оно не показывает цену курсов, оно действует так, как будто такой переменной нет. Я мог бы выполнять выборку объекта в действиях, но это было бы бесполезно, потому что извлеченный объект (контент) не будет отображаться в условиях и даже недоступен через селектор данных для дальнейшего использования, например, с действием «Вычислить значение», потому что он не знает своего типа содержимого (сущностей) (однако [fetched-entity:field-price] преобразуется в фактическую цену курса в показанном сообщении, он просто не указан в селекторе данных).

Кто-нибудь может сказать, почему это происходит или лучше, как это исправить? Я не хочу писать свой модуль для чего-то, чего можно добиться с помощью правил прямо из коробки, но это поведение меня уже 2 дня беспокоит.

Система работает на Drupal 7 кстати.

РЕДАКТИРОВАТЬ: при срабатывании правила «После сохранения нового контента» все устанавливается, как и ожидалось, с проверкой типа контента (контент [узел] имеет тип «Курс»), поэтому я почти уверен, что все поля для курса доступны.


person Jan Tovarnak    schedule 18.08.2012    source источник


Ответы (1)


Как бы я ни сопротивлялся, мне пришлось заставить это работать с компонентами. Компонент принимает два параметра - сущность Node (типа Course) и сущность User. В компоненте сравниваются кредит пользователя и стоимость курса. Все (ну, все, что касается этой проблемы) работает так, как задумано, мне просто нужно было сначала получить сущность курса (по идентификатору сущности) в действии правила и предоставить результирующую переменную компоненту.

person Jan Tovarnak    schedule 18.08.2012