我试图以编程方式添加一些规则,我遵循此tutorial根据规则管理不同的价格列表。为了创建规则,它使用了一个default_rules_configuration挂钩,将在“规则被加载时”执行。如何在drupal中添加新规则
1 - 当“规则被加载”时,显然不是很清楚,显然是运行cron。它是唯一触发它的方法吗?
2 - 有没有办法以编程方式添加规则,所以可以在插入角色钩子中添加规则,或者这是default_rules钩子唯一的方法吗?
由于
我试图以编程方式添加一些规则,我遵循此tutorial根据规则管理不同的价格列表。为了创建规则,它使用了一个default_rules_configuration挂钩,将在“规则被加载时”执行。如何在drupal中添加新规则
1 - 当“规则被加载”时,显然不是很清楚,显然是运行cron。它是唯一触发它的方法吗?
2 - 有没有办法以编程方式添加规则,所以可以在插入角色钩子中添加规则,或者这是default_rules钩子唯一的方法吗?
由于
1 - 根据hook_default_rules_configuration
documentation:当规则配置加载
该钩子被调用。
该函数实际上是在清除缓存时调用的,因为这是Drupal通过entity_defaults_rebuild
重建代码中提供的默认实体。
您可以检查完整的调用堆栈如何hook_default_rules_configuration
功能是通过debug_backtrace
2呼吁 - 要设置在插入作用反应的规则,你实际上必须创建在用户插入反应的规则然后检查保存的角色,看看它是否与您感兴趣的角色相匹配。
我发现通过UI执行此操作更容易。下面是检查是否该用户分配匿名角色,将电子邮件发送到管理员,如果这样一个规则的出口:
{ "rules_role_change_rule" : {
"LABEL" : "Role change rule",
"PLUGIN" : "reaction rule",
"REQUIRES" : [ "rules" ],
"ON" : [ "user_insert" ],
"IF" : [
{ "user_has_role" : { "account" : [ "account" ], "roles" : { "value" : { "1" : "1" } } } }
],
"DO" : [
{ "mail" : {
"to" : "[email protected]",
"subject" : "User role changed",
"message" : "User role has changed",
"from" : "[email protected]",
"language" : [ "" ]
}
}
]
}
}
你仍然要执行hook_default_rules_configuration
但有一个替换规则教程适合您的需求。
我的问题的重点是'何时加载规则配置'。 – mb14
@ mb14我在上面添加了更多细节。我不会浏览完整的调用堆栈跟踪,但这就是我将如何跟踪函数以查看如何,何时以及通过调用其他函数的方式。 – nmc