Я довольно новичок в drupal, но так как друг попросил меня помочь ему, я немного в него вник. Мне удалось заставить многие вещи работать, но есть одна проблема, с которой я не могу справиться. Вот чего я пытаюсь достичь:
Курсы будут представлены в виде группы OG с сущностью Node. Каждый курс имеет тип контента «Курс» (сущность типа «Узел») и имеет свою цену. В правилах я пытаюсь проверить, достаточно ли у пользователя кредита, чтобы присоединиться к курсу, таким образом запуская его в событии «Перед сохранением членства в og». Если у пользователя недостаточно средств, я хочу прервать сохранение членства в ОГ и выдать какую-то ошибку.
Довольно просто, но все же есть некоторые проблемы, которых я не ожидал. Вот что я делаю/имею:
- у каждого пользователя есть настраиваемое поле под названием «field-credit», с этим нет проблем, так как я могу получить к нему доступ через site:current-user:field-credit в любое время и в любом месте в правилах.
- курс — это не что иное, как простая группа OG с сущностью Node с настраиваемым типом контента «Курс», в которой определено настраиваемое поле «цена поля» для хранения цены курса.
В модуле «Правила» (через пользовательский интерфейс) я делаю такое правило:
- запуск по событию «Перед сохранением членства в og»
- 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 кстати.
РЕДАКТИРОВАТЬ: при срабатывании правила «После сохранения нового контента» все устанавливается, как и ожидалось, с проверкой типа контента (контент [узел] имеет тип «Курс»), поэтому я почти уверен, что все поля для курса доступны.