Vous pouvez exporter la configuration des règles via l'interface utilisateur des règles, puis implémenter hook_default_rules_configuration_alter () comme ceci:
/**
* 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" ] } }
]
}
}');
}
}
Modifiez simplement les instances de $data['commerce_cart_add_to_cart_message']
pour utiliser le nom de votre machine de règles et remplacez la chaîne d'exportation par la vôtre.
Vous pouvez également utiliser rules_import () au lieu de entity_import () . L'un ou l'autre est acceptable.
Étant donné que le module de règles charge les règles par défaut du code dans la base de données et les charge à partir de là, il ne détectera pas immédiatement votre remplacement. Pour ce faire, accédez à l'interface utilisateur des règles et annulez la règle. Il reviendra au code par défaut, qui sera votre remplacement.
Pour annuler une règle par programme, vous pouvez le faire (en remplaçant à nouveau le nom de la machine de la règle):
if ($rules_config = rules_config_load('commerce_cart_add_to_cart_message')) {
$rules_config->delete();
}
Un exemple d'utilisation de cela peut être de le faire lors d'une fonction de mise à jour pour un module personnalisé.
Il peut sembler wring de le supprimer, mais delete et revert sont équivalents pour les règles fournies par le code car supprimer signifie supprimer de la base de données. S'il s'agissait d'une règle créée via l'interface utilisateur, elle disparaîtrait, mais une règle du code sera simplement supprimée de la base de données, puis relue à partir du code.
Malheureusement, il n'existe actuellement que des commandes drush pour activer / désactiver les règles. Il existe une demande de fonctionnalité pour une commande de suppression / restauration sur https://www.drupal.org/node/2507187
hook_default_rules_configuration
je peux annuler les règles pour que toutes les mises à jour soient appliquées. c'est intelligent, mais: puis-je forcer un retour par règle? puis-je faire cela par programme?rules_ui_confirm_operation_apply
. Ici, vous pouvez également activer et désactiver. Merci pour votre grande aide! Je vais essayer un peu et accepter votre réponse dans une minutePour mettre à jour les règles du module par programme, vous pouvez les charger et les modifier. Exemple de suppression d'une seule action :
S'il s'agit d'un changement unique, ajoutez-le à hook_update.
Voir: RulesPlugin pour l'API.
la source