0

我对drupal还很陌生,但是由于朋友让我帮助他,所以我对此有所了解。我设法让很多事情正常工作,但有一个问题我无法解决。这是我想要实现的目标:

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

非常简单,但是,有一些我没想到会出现的问题。这就是我所做/拥有的:

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

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

  1. 触发事件“在保存 og 成员资格之前”
  2. 条件如下(按顺序):
    • 实体 [og-membership:group:entity] 是 Node 类型(确保我可以访问内容类型)
    • 内容 [og-membership:group:entity] 是 Course 类型(确保我可以访问课程特定字段)
    • 数据对比:[site:current-user:field-credit] 低于 [og-membership:group:entity:field-price]

这里有一些我无法完全理解的东西 - 添加这些条件后(实体类型表示我正在使用节点,节点内容类型表示我正在使用课程),我可以在数据选择器中看到我需要的所有字段,因此规则应该知道它们并使用它们。但实际上,它们并不存在!当我在其中显示带有 [og-membership:group:entity:field-price] 的消息时(仍然可以通过数据选择器访问),它不显示课程价格,就像没有这样的变量一样。我可以在操作中进行实体获取,但这没有用,因为在条件中看不到获取的实体(内容),甚至无法通过数据选择器访问以供进一步使用,例如“计算值”操作,因为它不知道它的(实体)内容类型(但是 [fetched-entity:

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

系统在 Drupal 7 上运行。

编辑:在“保存新内容后”的规则触发中,一切都按预期设置,检查内容类型(内容[节点]是课程类型),所以我很确定课程的所有字段都可用。

4

1 回答 1

0

尽管我很不情愿,但我不得不让这个与组件一起工作。组件有两个参数——节点实体(Course 类型)和用户实体。在组件中,正在比较用户学分和课程价格。一切(好吧,关于这个问题的一切)都按预期工作,我只需要首先在规则操作中获取 Course 实体(通过实体 id)并将结果变量提供给组件。

于 2012-08-18T20:22:29.800 回答