web-dev-qa-db-fra.com

Comment créer des conditions d'événement d'action de règles personnalisées?

Existe-t-il une formule ou un module universel pour créer des actions, événements et conditions de règles personnalisées? Donc, je dois juste remplacer les valeurs requises et le reste du code reste le même. J'ai cherché, mais je n'ai pas trouvé un tel code. J'en ai trouvé peu, mais ceux-ci étaient ciblés sur un besoin/une question spécifique.

Par exemple, il manque beaucoup de choses. J'utilise module de message pour enregistrer l'activité. J'utilise module de statuts et indicateur 2 (l'indicateur 3 n'est pas compatible avec le module de statuts) J'essaie de faire ce qui suit

  1. Consigner les commentaires sur les états. Journaux uniquement pour "l'utilisateur actuellement connecté". Impossible de déterminer qui a commenté. par exemple John a commenté votre mise à jour de statut. Événement disponible, mais affiche uniquement le nom d'utilisateur actuel au lieu de celui qui a commenté.
  2. Enregistrez l'activité pour "John a aimé votre mise à jour de statut". Aucun événement disponible.
  3. De même, pour les commentaires de mises à jour de statut, "aime le drapeau".
  4. John a commencé à vous suivre sur stackexchange. L'événement est disponible, mais il manque également l'option de dire qui vous a suivi. Il affiche également uniquement le nom d'utilisateur actuel. Evidemment vous n'avez pas besoin de votre nom ici, vous voulez savoir qui vous a suivi.
  5. John vous a mentionné sur stackexchange. Encore une fois, au lieu de john, il affichera l'utilisateur actuel car vous n'avez aucune option lors de la configuration de la règle.

Les activités simples sont cependant faciles à créer.

5
Umair

Une " formule ou module universel pour créer des actions, événements et conditions de règles personnalisées " (comme c'est votre question), consiste à écrire un module personnalisé. Pour ce faire, vous créez un nouveau module ou vous étendez l'un de vos modules personnalisés existants. Reportez-vous à Drupal Custom Rules comment écrire vos propres conditions d'événements, actions et objets personnalisés (+ jetons personnalisés) pour un excellent tutoriel sur la façon de le faire. Les principales étapes détaillées dans ce didacticiel sont décrites ci-dessous (avec le code inclus ci-dessous cité à partir de ce lien).

Partie 1: Définir l'événement, la condition et l'action

Définir l'événement de règles

/**
* 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.')),
      ),
    ),
  );
}

Définir la condition des règles

/**
 * 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',
    ),
  );
}

Définir l'action de règles

/**
 * 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',
    ),
  );
}

Partie 2: Codage de l'événement, de la condition et de l'action personnalisés

Un événement:

Quelque part dans votre module personnalisé, vous devez inclure une logique pour déclencher l'événement, avec quelque chose de similaire à cet exemple (notez le your_module_package_bought dedans):

  //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);

État:

Pour évaluer la condition Rules (pour vérifier si elle est TRUE ou FALSE), la fonction your_module_condition_package_type est exécuté à l'aide des arguments fournis. Voici un exemple de l'apparence d'une telle fonction:

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

Action:

Quelque part dans votre module personnalisé, vous devez inclure une logique pour effectuer l'action réelle, dans cet exemple, elle doit être effectuée dans la fonction nommée your_module_action_change_order_status.

6
Pierre.Vriens