ルール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']
ルールのマシン名を使用するようにのインスタンスを変更し、エクスポート文字列を独自のものに置き換えます。
entity_import()の代わりにrules_import()を使用することもできます。どちらでもかまいません。
ルールモジュールはデフォルトルールをコードからデータベースにロードし、それ以降はデータベースからロードするため、オーバーライドをすぐには取得しません。これを行うには、ルールUIに移動してルールを元に戻します。オーバーライドするデフォルトのコードに戻ります。
プログラムでルールを元に戻すには、次のようにします(ここでも、ルールマシン名を置き換えます)。
if ($rules_config = rules_config_load('commerce_cart_add_to_cart_message')) {
$rules_config->delete();
}
その使用例としては、カスタムモジュールの更新機能中に実行する場合があります。
削除しているように思われるかもしれませんが、削除はデータベースから削除することを意味するため、コードによって提供されるルールの削除と復帰は同等です。これがUIを介して作成されたルールである場合、それはなくなりますが、コードからのルールはDBから削除され、コードから再度読み込まれます。
残念ながら現在のところ、ルールを有効/無効にするためのdrushコマンドしかありません。https://www.drupal.org/node/2507187で削除/元に戻すコマンドの機能リクエストがあります