我对drupal还很陌生,但是由于朋友让我帮助他,所以我对此有所了解。我设法让很多事情正常工作,但有一个问题我无法解决。这是我想要实现的目标:
将有课程表示为带有节点实体的 OG 组。每门课程的内容类型为“课程”(实体类型为节点)并有其价格。在规则中,我试图检查用户是否有足够的学分来加入课程,从而在“保存 og 会员资格之前”事件中触发它。如果用户没有足够的资金,我想中止 OG 会员保存并抛出一些错误。
非常简单,但是,有一些我没想到会出现的问题。这就是我所做/拥有的:
- 每个用户都有一个名为“field-credit”的自定义字段,这没有问题,因为我可以通过 site:current-user:field-credit 随时随地在规则中访问它
- course 只不过是简单的 OG 组,带有 Node 实体,自定义内容类型为“Course”,它定义了自定义字段“field-price”用于存储课程价格
在规则模块(通过 UI)中,我制定了这样的规则:
- 触发事件“在保存 og 成员资格之前”
- 条件如下(按顺序):
- 实体 [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 上运行。
编辑:在“保存新内容后”的规则触发中,一切都按预期设置,检查内容类型(内容[节点]是课程类型),所以我很确定课程的所有字段都可用。