在规则条件内访问实体(内容)数据 - 奇怪的行为

时间:2012-08-18 10:17:20

标签: drupal drupal-7 organic-groups drupal-rules

我对drupal很新,但是既然朋友让我帮助他,我就进入了它。我设法让许多事情发挥作用,但有一个问题我无法理解。这是我想要实现的目标:

将有一些课程表示为具有Node实体的OG组。每门课程的内容类型为“课程”(实体属于Node类型)并且有其价格。在规则中,我试图检查用户是否有足够的信用加入课程,从而在“保存og会员资格之前”事件中触发它。如果用户没有足够的资金,我想中止OG会员保存并抛出一些错误。

非常直截了当但是,有些问题我没想到会出现。这就是我的所作所为:

  • 每个用户都有自定义字段“field-credit”,没有问题因为我可以通过网站访问它:current-user:field-credit随时随地的规则
  • 当然只是简单的OG组,其中Node实体的自定义内容类型为“Course”,它定义了自定义字段“field-price”来存储课程价格

在规则模块中(通过UI)我制定了这样的规则:

  1. 触发事件“保存og会员资格之前”
  2. 条件如下(按此顺序):
    • 实体[og-membership:group:entity]属于Node类型(确保我可以访问内容类型)
    • 内容[og-membership:group:entity]的类型为课程(确保我可以访问课程特定字段)
    • 数据比较:[site:current-user:field-credit]低于[og-membership:group:entity:field-price]
  3. 这里有一些我无法完全理解的东西 - 在添加这些条件后(实体类型说我正在使用Node,Node类型说我正在使用Course),我可以看到我需要的所有字段数据选择器,因此规则应该知道它们并使用它们。但实际上,他们不在那里!当我在其中显示[og-membership:group:entity:field-price]的消息时(仍然可以通过数据选择器访问),它不会显示课程价格,就像没有这样的变量一样。我可以在动作中进行实体获取,但这没有用,因为在条件中不会看到获取的实体(内容),甚至无法通过数据选择器访问它以进一步使用,例如使用“计算值”操作,因为它不知道它的(实体)内容类型(但是[fetched-entity:field-price]在显示的消息中被转换为实际课程价格,它只是没有在数据选择器中列出。)

    任何人都可以说,为什么会发生这种情况或更好,如何解决?我不想为自己的某些东西编写自己的模块,这可以通过开箱即用的规则来实现,但这种行为已经让我困扰了2天。

    系统正在Drupal 7 btw上运行。

    编辑:在“保存新内容后”的规则触发中,所有内容都按预期设置,并检查内容类型(内容[节点]类型为课程),因此我非常确定当然所有字段都可用。

1 个答案:

答案 0 :(得分:0)

不像我一样,我不得不使用组件。 Component有两个参数 - 节点实体(类型为Course)和User实体。在组件中正在比较用户信用和课程价格。一切(好吧,关于这个问题的一切)按预期工作,我只需要先在规则操作中获取课程实体(按实体ID),然后将结果变量提供给组件。