J'essaie d'utiliser des formulaires Web avec le module Rules .
Comment comparer les données avec les valeurs soumises dans un formulaire Web?
Par exemple, si le formulaire Web a un bouton radio oui/non, comment vérifier que la valeur soumise est oui ?
Lors de l'ajout d'une nouvelle condition, je choisis:
Je ne sais pas comment accéder à un form_key particulier pour vérifier sa valeur. Je pense que Data devrait avoir plus d'options à choisir.
Au minimum, assurez-vous que le module Webform Rules est activé. Quelques détails à ce sujet (à partir de sa page de projet):
Ce module ajoute l'intégration des règles sur les formulaires Web.
Avez-vous déjà voulu réagir à la soumission d'un formulaire Web à l'aide de règles mais n'avez pas trouvé l'événement approprié?
Les règles de formulaire Web permettent d'attraper les soumissions de formulaires Web par des règles et de faire tout ce que vous souhaitez en faire (c'est-à-dire: faire toutes les règles qui vous permettent d'en faire).
Vous pouvez également consulter la demande de fonctionnalité " exposer les données de soumission aux règles ". En voici un résumé:
À l'heure actuelle, les données de soumission ne sont pas exposées aux règles, sauf au moyen du remplacement de jetons ou d'actions php personnalisées. Ce correctif expose les données de soumission d'une manière "de première classe".
Le statut du problème est "Besoin de travail" ... pas un problème "facile".
Le même problème contient un commentaire avec une solution de contournement (c'est génial je pense, parce que c'est si simple), voici une citation pertinente:
Vous pouvez initialiser une variable de chaîne de règles avec les jetons. Si vous avez besoin d'entiers ou de booléens, vous pouvez ensuite le convertir en n'importe quoi, puis l'utiliser pour charger des nœuds ou autre chose.
Une image vaut plus de 1000 mots, consultez la sérigraphie incluse dans ce commentaire .
Considérez cette règle (au format d'exportation des règles):
{ "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"
}
}
]
}
]
}
]
}
}
Quelques détails sur la règle ci-dessus:
Actions de règles:
submitted_form_component_value
et avec le libellé "Valeur du composant de formulaire soumis" et avec la valeur [data:contact_us_message-value-raw]
(le composant de formulaire que nous voulons valider dans les actions de règles suivantes).mail.ru
. Si tel est le cas, effectuez une autre action de règles comme "Afficher un message d'erreur sur le site". De toute évidence, à ce stade, vous pouvez réaliser n'importe quelle magie de règles ("bloquer l'adresse IP" semble approprié).Soyez conscient: conformément à l'événement de règles que nous avons utilisé ici, le formulaire Web a été soumis (et jusqu'à présent, je n'ai pas trouvé d'événement plus approprié comme " Avant de soumettre un formulaire Web ").
Avec la règle ci-dessus activée, j'ai soumis un formulaire Web. Voici le message que j'ai reçu (selon la première action de règles):
Le composant de formulaire Web soumis par Pierre (= Prénom :) Vriens (= Nom :) contient un champ intitulé "Objet:" qui a une valeur "Ceci est une démonstration d'une validation d'un composant de formulaire Web à l'aide de règles ..." et un autre champ "Message:" qui a la valeur "Bonjour! Devinez ce qui se passe APRÈS avoir soumis un formulaire Web avec un composant de formulaire contenant une chaîne comme mail.ru? Les paris sont ouverts ...".
Et bien sûr, c'est le message d'erreur qui le suit tout de suite (selon la dernière action de règles):
Arrêtez-vous et écoutez! ... Un des composants du formulaire que vous venez de soumettre (= "Bonjour! Devinez ce qui se passe APRÈS avoir soumis un formulaire Web avec un composant de formulaire contenant une chaîne comme mail.ru? Les paris sont ouverts ..."), contient une valeur qui n'est pas autorisée ici ...
PS: Dans cet exemple, j'utilise le module Règles conditionnelles , bien que vous puissiez également retravailler l'action de règles pour effectuer des composants de règles (dans lesquels vous ajoutez les conditions de règles appropriées), afin de ne pas besoin de ce module supplémentaire. Pour plus de détails à ce sujet, reportez-vous à la réponse à " Quelle est l'alternative à l'utilisation du module Règles conditionnelles? ".