Conditional Rules モジュールでは、ルールアクションをルールアクションに含めることができます(If/Else
コンストラクト) Rules モジュールを使用するだけではできないことです。 条件付きルール を使用して解決できる典型的な質問のいくつか(多くのうち)を以下に示します。
ただし、次のような 条件付きルール モジュールにはいくつかの問題があります。
同等の Rules ロジックを構築するための代替ソリューションはありますか? Conditional Rules モジュールを使用する必要はありませんか?
Conditional Rules モジュールを使用したいカスタムルールの場合は、対応するルールコンポーネントを作成し、同様のルールアクションを実行できますが、追加のルール条件を使用して、条件付きルールモジュールを使用して含める必要があります。次に、元のルールのルールアクション内でそのルールコンポーネントを実行します。
次のプロトタイプの例を検討してください(「IDによるエンティティの取得」、「変数の設定」などの前のルールアクションを含む、より複雑なルールの簡略化バージョンであると想定してください)。
{ "rules_show_a_message_using_conditional_rules" : {
"LABEL" : "Show a message using Conditional Rules",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules_conditional", "rules" ],
"ON" : { "node_delete--page" : { "bundle" : "page" } },
"DO" : [
{ "CONDITIONAL" : [
{
"IF" : { "NOT data_is" : { "data" : [ "node:promote" ], "value" : "1" } },
"DO" : [
{ "drupal_message" : { "message" : "Bingo ... using \u0022Conditional Rules\u0022 ..." } }
]
}
]
}
]
}
}
ルールコンポーネントを使用した場合の同等の機能を次に示します。
{ "rules_show_a_message_using_a_rules_component" : {
"LABEL" : "Show a message using a Rules Component",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"ON" : { "node_delete--page" : { "bundle" : "page" } },
"DO" : [ { "component_rules_say_bingo" : { "current_node" : [ "node" ] } } ]
}
}
そして、関連するルールコンポーネントは次のようになります。
{ "rules_say_bingo" : {
"LABEL" : "Say bingo",
"PLUGIN" : "rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : { "current_node" : { "label" : "Current node", "type" : "node" } },
"IF" : [
{ "NOT data_is" : { "data" : [ "current-node:promote" ], "value" : "1" } }
],
"DO" : [
{ "drupal_message" : { "message" : "Bingo ... using a Rules Component instead of \u0022Conditional Rules\u0022 ..." } }
]
}
}
ルールコンポーネントを使用した代替策の詳細:
注:上記は、ソリューションの重要な部分を説明するための単なる「概念」です。このプロトタイプは、以前のアクションとして以前の「IDによるエンティティのフェッチ」(または「変数の設定」または「現在のユーザーポイントの読み込み」)を必要としなかったためです。