您可以通过Rules UI导出规则配置,然后像下面这样实现hook_default_rules_configuration_alter():
/**
* Implements hook_default_rules_configuration_alter().
*/
function MODULENAME_default_rules_configuration_alter(&$data) {
if (isset($data['commerce_cart_add_to_cart_message'])) {
$data['commerce_cart_add_to_cart_message'] = entity_import('rules_config', '{ "commerce_cart_add_to_cart_message" : {
"LABEL" : "Display an Add to Cart message",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"TAGS" : [ "Commerce Cart" ],
"REQUIRES" : [ "rules", "commerce_cart" ],
"ON" : { "commerce_cart_product_add" : [] },
"IF" : [
{ "data_is" : { "data" : [ "commerce-order:commerce-nocart" ], "value" : "0" } }
],
"DO" : [
{ "commerce_cart_add_to_cart_message" : { "commerce_product" : [ "commerce-product" ] } }
]
}
}');
}
}
只需更改实例$data['commerce_cart_add_to_cart_message']
即可使用您的规则计算机名称,并用您自己的实例替换导出字符串。
您也可以使用rules_import()代替entity_import()。两者都可以接受。
由于rules模块将默认规则从代码加载到数据库中,然后再从数据库中加载默认规则,因此它不会立即获取您的替代。为此,请导航至“规则”用户界面并还原规则。它将恢复为默认代码,它将被您覆盖。
要以编程方式还原规则,您可以执行以下操作(再次替换规则计算机名称):
if ($rules_config = rules_config_load('commerce_cart_add_to_cart_message')) {
$rules_config->delete();
}
一个示例用法可能是在自定义模块的更新功能期间执行此操作。
似乎要删除它,但是删除和还原对于代码所提供的规则是等效的,因为删除意味着从数据库中删除。如果这是通过UI创建的规则,那么它将消失,但是来自代码的规则只会从数据库中删除,然后再次从代码中读取。
不幸的是,当前只有drush命令用于启用/禁用规则。https://www.drupal.org/node/2507187上有一个功能要求删除/还原命令