【问题标题】:How to add new rules in drupal如何在drupal中添加新规则
【发布时间】:2012-12-07 08:38:36
【问题描述】:

我正在尝试以编程方式添加一些规则,我正在关注tutorial 以根据规则管理不同的价目表。要创建规则,它使用 default_rules_configuration 钩子,该钩子将在“加载规则时”执行。

1 - 不清楚,当“正在加载规则”时,显然运行 cron 会这样做。这是唯一的触发方式吗?

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

谢谢

【问题讨论】:

    标签: drupal drupal-7 drupal-commerce


    【解决方案1】:

    1 - 根据hook_default_rules_configuration documentation:

    加载规则配置时调用此钩子。

    当你清除缓存时实际上调用该函数,因为这是当 Drupal 通过entity_defaults_rebuild 重建代码中提供的默认实体时。

    您可以检查完整的调用堆栈,了解如何使用debug_backtrace 调用hook_default_rules_configuration 函数

    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" : "admin@website.com",
              "subject" : "User role changed",
              "message" : "User role has changed",
              "from" : "drupal@website.com",
              "language" : [ "" ]
            }
          }
        ]
      }
    }
    

    您仍然需要实现 hook_default_rules_configuration,但将教程中的规则替换为适合您需要的规则。

    【讨论】:

    • 我的问题的重点是“何时加载规则配置”。
    • @mb14 我在上面添加了更多细节。我不会查看完整的调用堆栈跟踪,但这就是我将如何跟踪函数以查看它是如何、何时以及通过哪些其他函数被调用的。
    猜你喜欢
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2020-01-06
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多