Rules モジュールでWebフォームを使用しようとしています。
データをWebフォームで送信された値と比較するにはどうすればよいですか?
たとえば、Webフォームに[はい/いいえ]ラジオボタンがある場合、送信された値がyesであることをどのように確認できますか?
新しい条件を追加するとき、私は以下を選択します。
特定のform_keyにアクセスしてその値を確認する方法がわかりません。 Dataにはもっと多くの選択肢があるはずだと思います。
少なくとも Webform Rules モジュールが有効になっていることを確認してください。それに関するいくつかの詳細(プロジェクトページから):
このモジュールは、Webフォームにルール統合を追加します。
ルールを使用してWebフォームの送信に反応したいが、適切なイベントが見つからなかったことがありますか?
Webformルールを使用すると、Webフォームの送信をルールでキャッチし、それを使用してやりたいことをすべて実行することができます(つまり、ルールで実行できるすべてのルールを実行します)。
また、機能リクエスト「 提出データをルールに公開 」を確認することもできます。以下がその概要です。
現在、送信データは、トークンの置換またはカスタムのphpアクションを除いて、ルールに公開されていません。このパッチは、「ファーストクラス」の方法で提出データを公開します。
問題のステータスは「作業が必要」です。「簡単な」問題ではありません。
まったく同じ問題に 回避策のコメント が含まれています(これは非常に単純なので、すばらしいと思います)、ここから関連する引用を示します。
トークンを使用してルール文字列変数を初期化できます。整数またはブール値が必要な場合は、後でそれを何にでも変換し、それを使用してノードなどをロードできます。
写真は1000ワードを超える価値があります。チェックアウト そのコメントに含まれているスクリーンプリント .
このルールを検討してください(ルールのエクスポート形式):
{ "rules_validate_a_component_of_a_submitted_webform" : {
"LABEL" : "Validate a component of a submitted webform",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "rules_conditional", "webform_rules" ],
"ON" : { "webform_rules_submit" : [] },
"IF" : [
{ "NOT user_has_role" : { "account" : [ "user" ], "roles" : { "value" : { "2" : "2" } } } }
],
"DO" : [
{ "drupal_message" : { "message" : "The webform component submitted by [data:contact_us_first_name-value] (= [data:contact_us_first_name-title]) [data:contact_us_last_name-value] (= [data:contact_us_last_name-title]) contains a field labeled \u0022[data:contact_us_subject-title]\u0022 which has value \u0022[data:contact_us_subject-value]\u0022 and another field \u0022[data:contact_us_message-title]\u0022 which has value \u0022[data:contact_us_message-value-raw]\u0022." } },
{ "variable_add" : {
"USING" : { "type" : "text", "value" : "[data:contact_us_message-value-raw]" },
"PROVIDE" : { "variable_added" : { "submitted_form_component_value" : "Submitted form component value" } }
}
},
{ "CONDITIONAL" : [
{
"IF" : { "text_matches" : { "text" : [ "submitted-form-component-value" ], "match" : "mail.ru" } },
"DO" : [
{ "drupal_message" : {
"message" : "Stop and listen! ... One of the form components of the form you just submitted (= \u0022[submitted-form-component-value:value]\u0022), contains some value that is not allowed around here ...",
"type" : "error"
}
}
]
}
]
}
]
}
}
上記のルールに関する詳細:
ルールアクション:
submitted_form_component_value
、ラベルは「送信済みフォームコンポーネントの値」、値は[data:contact_us_message-value-raw]
(以降で検証するフォームコンポーネント)です。ルールアクション)。mail.ru
が含まれているかどうかをチェックします。その場合は、「サイトにエラーメッセージを表示する」などの別のルールアクションを実行します。明らかに、この時点でルールのマジックを実行できます(「IPアドレスのブロック」が適切と思われます)。注意:ここで使用したルールイベントに従って、Webフォームが送信されました(そしてこれまでのところ、「ウェブフォームを送信する前に」)。
上記のルールを有効にして、ウェブフォームを送信しました。これは私が受け取ったメッセージです(最初のルールアクションに従って):
Pierre(= First name :) Vriens(= Last name :)によって送信されたwebformコンポーネントには、「Subject:」というラベルの付いたフィールドがあり、「これは、Rules ...を使用したwebformコンポーネントの検証のデモです」と別の「Bonjour!mail.ruのような文字列を含むフォームコンポーネントを含むWebフォームを送信した後に何が起こるかを推測します?賭けは開かれています...」というフィールドを持つ「メッセージ:」。
そして確かに、これはすぐにそれに続くエラーメッセージです(最後のルールアクションに従って)。
やめて聞いて! ...送信したフォームのフォームコンポーネントの1つ(= "Bonjour!mail.ruのような文字列を含むフォームコンポーネントを含むWebフォームを送信した後、何が起こるかを推測します。賭けは開いています...")を含みます。ここで許可されていない値...
PS:この例では Conditional Rules モジュールを使用していますが、適切なルール条件を追加するルールコンポーネントを実行するようにルールアクションを作り直すこともできるため、この追加モジュールが必要です。詳細については、「 条件付きルールモジュールを使用する代わりの方法は何ですか? 」の回答を参照してください。