it-swarm.com.de

Wie erstelle ich benutzerdefinierte Regeln für Aktionsereignisbedingungen?

Gibt es eine universelle Formel oder ein universelles Modul zum Erstellen benutzerdefinierter Regelaktionen, -ereignisse und -bedingungen? Damit ich nur die erforderlichen Werte ersetzen muss und der Rest des Codes gleich bleibt. Ich habe gesucht, aber keinen solchen Code gefunden. Ich habe nur wenige gefunden, aber diese waren auf ein bestimmtes Bedürfnis/eine bestimmte Frage ausgerichtet.

Zum Beispiel fehlen viele Dinge. Ich verwende Nachrichtenmodul , um Aktivitäten zu protokollieren. Ich verwende Statusmodul und Flag 2 (Flag 3 ist nicht mit dem Statusmodul kompatibel) Ich versuche Folgendes zu tun

  1. Protokollieren Sie Statuskommentare. Protokolliert nur für "aktuell angemeldeter Benutzer". Kann nicht feststellen, wer kommentiert hat. für z.B. John hat Ihre Statusaktualisierung kommentiert. Ereignis verfügbar, zeigt jedoch nur den aktuellen Benutzernamen an, anstatt wer kommentiert hat.
  2. Protokollieren Sie die Aktivität für "John hat Ihre Statusaktualisierung gefallen". Keine Veranstaltung verfügbar.
  3. In ähnlicher Weise wird für Statusaktualisierungskommentare "Likes-Flag" angezeigt.
  4. John folgte dir beim Stapelaustausch. Die Veranstaltung ist verfügbar, es fehlt jedoch auch die Option, festzustellen, wer Ihnen gefolgt ist. Es wird auch nur der aktuelle Benutzername angezeigt. Offensichtlich brauchen Sie Ihren Namen hier nicht, Sie möchten wissen, wer Ihnen gefolgt ist.
  5. John hat dich beim Stackexchange erwähnt. Anstelle von John wird auch hier der aktuelle Benutzer angezeigt, da Sie beim Einrichten der Regel keine Option haben.

Die einfachen Aktivitäten lassen sich jedoch leicht erstellen.

5
Umair

Eine " universelle Formel oder ein universelles Modul zum Erstellen von Aktionen, Ereignissen und Bedingungen für benutzerdefinierte Regeln " (wie Ihre Frage lautet) besteht darin, ein benutzerdefiniertes Modul zu schreiben. Dazu erstellen Sie entweder ein neues Modul oder erweitern eines Ihrer vorhandenen benutzerdefinierten Module. Unter Benutzerdefinierte Drupal-Regeln zum Schreiben Ihrer eigenen Ereignisbedingungen, Aktionen und benutzerdefinierten Objekte (+ benutzerdefinierte Token) finden Sie ein großartiges Tutorial dazu. Die Hauptschritte, die in diesem Tutorial beschrieben werden, werden weiter unten beschrieben (wobei der unten enthaltene Code über diesen Link zitiert wird).

Teil 1: Definieren des Ereignisses, der Bedingung und der Aktion

Definieren Sie das Regelereignis

/**
* Implementation of hook_rules_event_info().
* @ingroup rules
*/
function your_module_rules_event_info() {
  return array(
    'your_module_package_bought' => array(
      'label' => t('A package was bought'),
      'module' => 'your_module',
      'arguments' => array(
        'acting_user' => array('type' => 'user', 'label' => t('The user who bought the package.')),
        'package' => array('type' => 'package', 'label' => t('The purchased package.')),
      ),
    ),
  );
}

Definieren Sie die Regelbedingung

/**
 * implementation of hook_rules_condition_info()
 */
function your_module_rules_condition_info() {
  return array(
    'your_module_condition_package_type' => array(
      'label' => t('Type of the package'),
      'arguments' => array(
        'package_id' => array('type' => 'value', 'label' => t('The type of the purchased package.')),
        'package_type' => array('type' => 'string', 'label' => t('The type of the purchased package is')),
      ),
      'module' => 'your_module',
    ),
  );
}

Definieren Sie die Regelaktion

/**
 * Implementation of hook_rules_action_info().
 */
function packages_rules_action_info() {
  return array(
    'your_module_action_change_order_status' => array(
      'label' => t('Change the order status'),
      'arguments' => array(
        'order' => array('type' => 'value', 'label' => t('The order object.')),
      ),
      'module' => 'your_module',
    ),
  );
}

Teil 2: Codieren des benutzerdefinierten Ereignisses, der Bedingung und der Aktion

Veranstaltung:

Irgendwo in Ihrem benutzerdefinierten Modul müssen Sie Logik einschließen, um das Ereignis auszulösen, ähnlich wie in diesem Beispiel (beachten Sie den your_module_package_bought Darin):

  //here the code for buying a package will be located
  //when that code returns that a package was bought trigger the rule
  $order = order_load($oid);//$oid will be the id of the order made
  $package = package_load($pid);//pid will be the id of the bought package
  global $user;
  rules_invoke_event('your_module_package_bought', $user, $package, $order);

Bedingung:

Um die Regelbedingung auszuwerten (um zu überprüfen, ob sie WAHR oder FALSCH ist), wird die Funktion your_module_condition_package_type Mit den angegebenen Argumenten ausgeführt. Hier ist ein Beispiel, wie eine solche Funktion aussehen könnte:

function your_module_condition_package_type($pid, $type) {
  $package = package_load($pid);
  return ($package->type == $type) ? true : false;
}

Aktion:

Irgendwo in Ihrem benutzerdefinierten Modul müssen Sie Logik einfügen, um die eigentliche Aktion auszuführen. In diesem Beispiel sollte dies innerhalb der Funktion your_module_action_change_order_status Ausgeführt werden.

6
Pierre.Vriens