2012-12-07 48 views
1

我试图以编程方式添加一些规则,我遵循此tutorial根据规则管理不同的价格列表。为了创建规则,它使用了一个default_rules_configuration挂钩,将在“规则被加载时”执行。如何在drupal中添加新规则

1 - 当“规则被加载”时,显然不是很清楚,显然是运行cron。它是唯一触发它的方法吗?

2 - 有没有办法以编程方式添加规则,所以可以在插入角色钩子中添加规则,或者这是default_rules钩子唯一的方法吗?

由于

回答

1

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但有一个替换规则教程适合您的需求。

+0

我的问题的重点是'何时加载规则配置'。 – mb14

+0

@ mb14我在上面添加了更多细节。我不会浏览完整的调用堆栈跟踪,但这就是我将如何跟踪函数以查看如何,何时以及通过调用其他函数的方式。 – nmc