web-dev-qa-db-fra.com

Comment comparer la comparaison des données avec les valeurs soumises dans un formulaire Web?

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:

  • Comparaison de données
  • Sélecteur de données *
  • Données (la valeur du formulaire Web soumis)

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.

6
Ryan Hepple

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".

Il est temps de travailler ...

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 .

... et une démo

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:

  • Événement de règles: après l'envoi d'un formulaire Web
  • Conditions des règles: L'utilisateur n'a PAS de rôle "authentifié" (c'est-à-dire: un utilisateur anonyme a soumis le formulaire).
  • Actions de règles:

    • Afficher un message informel sur le site (c'est uniquement à des fins d'assurance qualité, omettez cette action après avoir été convaincu que cela fonctionne).
    • Ajoutez une variable (c'est l'indice de tout cela ...), nommée 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).
    • Utilisez le module Règles conditionnelles pour effectuer une comparaison de texte. Dans ce cas, il vérifie s'il contient 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 ").

Afficher l'heure

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? ".

1
Pierre.Vriens