Puede exportar la configuración de reglas a través de la interfaz de usuario de reglas y luego implementar hook_default_rules_configuration_alter () de esta manera:
/**
* 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" ] } }
]
}
}');
}
}
Simplemente cambie las instancias de $data['commerce_cart_add_to_cart_message']
para usar el nombre de su máquina de reglas y reemplace la cadena de exportación por la suya.
También puede usar rules_import () en lugar de entity_import () . Cualquiera de los dos es aceptable.
Como el módulo de reglas carga las reglas predeterminadas del código en la base de datos y, a partir de ese momento, las carga de la base de datos, no recogerá de inmediato su anulación. Para hacerlo, vaya a la IU de reglas y revierta la regla. Volverá al código predeterminado, que será su anulación.
Para revertir mediante programación una regla, puede hacer esto (reemplazando nuevamente el nombre de la máquina de reglas):
if ($rules_config = rules_config_load('commerce_cart_add_to_cart_message')) {
$rules_config->delete();
}
Un ejemplo de uso de eso puede ser hacerlo durante una función de actualización para un módulo personalizado.
Puede parecer extraño eliminarlo, pero eliminar y revertir son equivalentes para las reglas proporcionadas por el código porque eliminar significa eliminar de la base de datos. Si se tratara de una regla creada a través de la interfaz de usuario, desaparecería, sin embargo, una regla del código simplemente se eliminará de la base de datos y luego se leerá nuevamente desde el código.
Desafortunadamente, actualmente solo hay comandos drush para habilitar / deshabilitar las reglas. Hay una solicitud de función para un comando eliminar / revertir en https://www.drupal.org/node/2507187
hook_default_rules_configuration
puedo revertir las reglas para que se apliquen las actualizaciones. eso es inteligente, pero: ¿puedo forzar una reversión por regla? puedo hacer esto programáticamente?rules_ui_confirm_operation_apply
. Aquí también puede habilitar y deshabilitar. ¡Gracias por tu gran ayuda! Probaré un poco y aceptaré tu respuesta en un minutoPara actualizar las reglas del módulo mediante programación, puede cargarlas y cambiarlas. Ejemplo de eliminación de una sola acción :
Si es un cambio de una sola vez, agréguelo a hook_update.
Ver: RulesPlugin para API.
fuente