È possibile esportare la configurazione delle regole tramite l'interfaccia utente delle regole e quindi implementare hook_default_rules_configuration_alter () in questo modo:
/**
* 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" ] } }
]
}
}');
}
}
Basta modificare le istanze di $data['commerce_cart_add_to_cart_message']
utilizzare il nome della macchina della regola e sostituire la stringa di esportazione con la propria.
Puoi anche usare rules_import () invece di entity_import () . O è accettabile.
Poiché il modulo delle regole carica le regole predefinite dal codice nel database e da allora in poi le carica dal database, non prenderà immediatamente il tuo override. Per farlo, vai all'interfaccia utente delle regole e ripristina la regola. Tornerà al codice predefinito, che sarà la tua sostituzione.
Per ripristinare a livello di codice una regola è possibile farlo (sostituendo nuovamente il nome del computer della regola):
if ($rules_config = rules_config_load('commerce_cart_add_to_cart_message')) {
$rules_config->delete();
}
Un esempio di utilizzo potrebbe essere quello di farlo durante una funzione di aggiornamento per un modulo personalizzato.
Potrebbe sembrare che lo stia cancellando, ma eliminare e ripristinare sono equivalenti per le regole fornite dal codice perché eliminare significa eliminare dal database. Se si trattasse di una regola creata tramite l'interfaccia utente, non verrebbe più utilizzata, tuttavia una regola dal codice verrà eliminata dal DB e quindi riletta dal codice.
Purtroppo al momento esistono solo comandi di trascinamento per abilitare / disabilitare le regole. C'è una richiesta di funzionalità per un comando di cancellazione / ripristino su https://www.drupal.org/node/2507187