カスタムルールのアクション、イベント、条件を作成するための汎用の数式またはモジュールはありますか?そのため、必要な値を置き換えるだけで、残りのコードは変わりません。検索しましたが、そのようなコードは見つかりませんでした。いくつかは見つかりましたが、それらは特定のニーズ/質問に向けられていました。
たとえば、足りないものがたくさんあります。 メッセージモジュール を使用してアクティビティをログに記録しています。 statuses module および flag 2 を使用しています(フラグ3はstatusesモジュールと互換性がありません)私は以下を実行しようとしています
シンプルなアクティビティは簡単に作成できます。
「カスタムルールのアクション、イベント、条件を作成するための普遍的な数式またはモジュール」(質問どおり)は、カスタムモジュールを作成することです。これを行うには、新しいモジュールを作成するか、既存のカスタムモジュールを拡張します。方法についての優れたチュートリアルについては、 Drupalカスタムルールで独自のイベント条件、アクション、カスタムオブジェクト(+カスタムトークン)を記述する方法 を参照してください。このチュートリアルで詳しく説明されている主な手順は、以下でさらに説明されています(そのリンクから引用された以下のコードが引用されています)。
/**
* 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',
),
);
}
カスタムモジュールのどこかに、次の例のようなものを使用して、イベントをトリガーするロジックを含める必要があります(その中のyour_module_package_bought
に注意してください)。
//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);
ルール条件を評価する(TRUEまたはFALSEかどうかを確認する)ために、提供された引数を使用して関数your_module_condition_package_type
が実行されます。このような関数の例を次に示します。
function your_module_condition_package_type($pid, $type) {
$package = package_load($pid);
return ($package->type == $type) ? true : false;
}
カスタムモジュールのどこかに、実際のアクションを実行するロジックを含める必要があります。この例では、your_module_action_change_order_status
という名前の関数内で実行する必要があります。