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
Les activités simples sont cependant faciles à créer.
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).
/**
* 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.')),
),
),
);
}
/**
* 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',
),
);
}
/**
* 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',
),
);
}
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);
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;
}
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
.