Sie können die Regelkonfiguration über die Regel-Benutzeroberfläche exportieren und dann hook_default_rules_configuration_alter () wie folgt implementieren :
/**
* 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" ] } }
]
}
}');
}
}
Ändern Sie einfach die Instanzen von $data['commerce_cart_add_to_cart_message']
, um den Namen Ihres Regelcomputers zu verwenden, und ersetzen Sie die Exportzeichenfolge durch Ihre eigene.
Sie können auch rules_import () anstelle von entity_import () verwenden . Beides ist akzeptabel.
Da das Regelmodul Standardregeln aus Code in die Datenbank lädt und sie von da an aus der Datenbank lädt, wird Ihre Überschreibung nicht sofort erfasst. Navigieren Sie dazu zur Benutzeroberfläche für Regeln und setzen Sie die Regel zurück. Es wird auf den Standardcode zurückgesetzt, der Ihre Überschreibung ist.
Um eine Regel programmgesteuert zurückzusetzen, können Sie dies tun (indem Sie den Namen des Regelcomputers erneut ersetzen):
if ($rules_config = rules_config_load('commerce_cart_add_to_cart_message')) {
$rules_config->delete();
}
Ein Beispiel dafür kann sein, dies während einer Aktualisierungsfunktion für ein benutzerdefiniertes Modul zu tun.
Es scheint, als würde Wring es löschen, aber Löschen und Zurücksetzen sind für Regeln, die vom Code bereitgestellt werden, gleichwertig, da Löschen Löschen aus der Datenbank bedeutet. Wenn dies eine Regel wäre, die über die Benutzeroberfläche erstellt wurde, wäre sie weg. Eine Regel aus dem Code wird jedoch nur aus der Datenbank gelöscht und dann erneut aus dem Code eingelesen.
Leider gibt es derzeit nur Drush-Befehle zum Aktivieren / Deaktivieren von Regeln. Unter https://www.drupal.org/node/2507187 wird eine Funktionsanforderung für einen Befehl zum Löschen / Zurücksetzen angezeigt
hook_default_rules_configuration
zurücksetzen, sodass alle Aktualisierungen angewendet werden. Das ist klug, aber: Kann ich eine Rücknahme pro Regel erzwingen? kann ich das programmgesteuert machen?rules_ui_confirm_operation_apply
. Hier können Sie auch aktivieren und deaktivieren. Vielen Dank für Ihre Hilfe! Ich werde ein wenig herumprobieren und Ihre Antwort in einer Minute akzeptierenUm die Modulregeln programmgesteuert zu aktualisieren, können Sie sie laden und ändern. Beispiel für das Entfernen einer einzelnen Aktion :
Wenn es sich um eine einmalige Änderung handelt, fügen Sie sie zu hook_update hinzu.
Siehe: RulesPlugin für API.
quelle