web-dev-qa-db-fra.com

Ajout d'actions personnalisées aux règles

J'essaie d'ajouter des actions, des événements et des conditions personnalisés pour travailler avec l'interface Rules. J'ai commencé par ajouter des actions personnalisées en créant un module personnalisé. Voici mon code jusqu'à présent.

rules_example.info:

name = Rules Example
description = Test module to add new actions, events, and conditions
core = 7.x

règles_exemple.module:

<?php
/**
 */

règles_exemple.rules.inc:

<?php

 /**
  * @file
  * Example rules module to create actions, events, and conditions
  */

/**
 * Implement hook_rules_action_info()

 * Declare any meta data about actions for Rules
 */

function rules_example_rules_action_info() {
$actions = array(
    'rules_example_actions_hello_world' => array(
        'label' => t('Print Hello World on the page'),
        'group' => t('Rules Example'),
        ),
    'rules_example_actions_hello_user' => array(
        'label' => t('Print Hello to the logged in user'),
        'group' => t('Rules Example'),
        'parameter' => array(
            'account' => array(
                'type' => 'user',
                'label' => t('User to say hello to'),
                ),
            ),
        ),
    );

return $actions;
}

/**
 * The action function for rules_example_action_hello_world
 */

function rules_example_action_hello_world() {
drupal_set_message(t('Hello World'));
} 

/** 
 * The action function for rules_example_action_hello_user
 */

function rules_example_action_hello_user($account) {
drupal_set_message(t('Hello @username',
 array('@username' => $account->name)));
}

Eh bien, c'est ça. J'ai enregistré tous ces fichiers dans un dossier rules_example dans sites/all/modules. Lorsque j'installe le module ou plutôt essaie de l'installer, j'obtiens cette erreur:

ReflectionException: Function rules_example_actions_hello_world() does not exist in ReflectionFunction->__construct() (line 1691 of /opt/lampp/htdocs/sites/all/modules/rules/includes/rules.core.inc)

Je ne sais pas quelle est l'erreur. Je vais à rules.core.inc mais je ne peux pas comprendre ce qui cause l'erreur. Merci.

5
why

Il y a une faute de frappe dans votre code - le nom de la fonction est "rules_example_actions_hello_world" dans votre définition d'actions, tandis que la fonction réelle est appelée "rules_example_action_hello_world".

9
Martin

Dans rules_example.module, ajoutez ceci:

module_load_include('inc', 'rules_example', 'rules_example.rules');

1
Joe Beuckman