web-dev-qa-db-fra.com

Obtenez les valeurs sélectionnées dans les cases à cocher et les boutons radio via le hook Gravity Forms gform_after_submission

Gravity Forms offre une documentation assez bonne et, bien sûr, Google offre davantage d'informations sur la manière dont les développeurs ont résolu d'autres problèmes liés à ce plugin - mais nous devons accomplir ce qui semble être une tâche relativement simple, mais nous ne pouvons trouver aucune méthode documentée pour le faire.

Nous utilisons le hook gform_after_submission pour ouvrir une transaction sur un service Web SOAP afin de transmettre certaines des valeurs de formulaire soumises.

Le point sur lequel nous sommes bloqués est maintenant d'obtenir la (les) valeur (s) sélectionnée (s) de la radio et des cases à cocher (et probablement aussi celles de <select>).

Gravity Forms utilise un système pour transmettre les champs par ID et utilise des points décimaux pour transmettre les valeurs des radios - par exemple:

Nom du champ: Prefix - ID de champ: 1 - Valeurs de champ: 1.1 "M.", 1.2 "Mme"

Gravity Forms passe un tableau des valeurs au crochet - si le "Mr." l'option est sélectionnée ce sont:

array(..) {
    ["1.1"]=> string(0) "Mr."
    ["1.2"]=> string(0) ""
}

Mais le tableau n'a aucune indication sur la valeur sélectionnée - il passe simplement une chaîne pour les deux.

Ce n'est pas un problème si vous ne traitez que deux valeurs - mais les champs peuvent contenir des centaines de valeurs et ces valeurs peuvent être mises à jour par le client via l'interface d'administration.

La recherche dans la base de code Gravity Forms présente quelques possibilités, telles que:

$value         = RGFormsModel::get_lead_field_value( $lead, $field );
$display_value = GFCommon::get_lead_field_display( $field, $value, $lead['currency'] );

Cela nécessite l’objet $ lead - également appelé objet $ entry - il est disponible, mais la méthode ne renvoie pas la valeur correcte, citant les données manquantes.

Une autre option est:

GFFormsModel::get_lead_field_value( $lead, $field );

Cependant, cela nécessite que nous passions un objet $ field correctement formaté - qui fait partie de l'objet $ form - mais, encore une fois, pas la route la plus propre.

Une idée est de rechercher dans l'objet $ _POST les valeurs soumises - cela n'inclut que les valeurs définies et non les valeurs vides - donc dans le cas du préfixe:

["input_1_1"]=> string(3) "Mr."

Une solution solide reposerait sur des informations sur le champ stocké dans Gravity Forms, telles que le nombre de valeurs que chaque champ contient - boucle sur eux et vérifie si chacun a une valeur définie, avant de renvoyer une chaîne mise en forme avec chaque valeur sélectionnée, séparée par une virgule .

Peut-être que Gravity Forms a déjà une solution préexistante à ce problème - cependant, il n’ya rien dans la documentation - toutes les informations sont les bienvenues!

2
Q Studio

Si vous avez l'objet formulaire/champ, vous pouvez récupérer une chaîne séparée par des virgules contenant les choix de champs sélectionnés à l'aide de la méthode GF_Field :: get_value_export () ajoutée à Gravity Forms 1.9.13.

Si vous ne l'utilisez qu'avec un ou deux champs, vous pouvez faire quelque chose comme ceci:

$field_id    = 4;
$field       = GFFormsModel::get_field( $form, $field_id );
$field_value = is_object( $field ) ? $field->get_value_export( $entry ) : '';

Ce qui précède renvoie les valeurs des choix sélectionnés. Si vous souhaitez renvoyer le texte du choix, vous devez définir le troisième paramètre de get_value_export () sur true, par exemple.

$field_value = is_object( $field ) ? $field->get_value_export( $entry, $field_id, true ) : '';

Si vous devez accéder à toutes les valeurs de champ de l'entrée, mais que vous voulez que les types de champ appropriés soient formatés pour utiliser le texte de choix, vous pouvez procéder comme suit:

add_action( 'gform_after_submission', function ( $entry, $form ) {

    foreach ( $form['fields'] as $field ) {
        $field_value = $field->get_value_export( $entry, $field->id, true );
        // do something with the field value.
    }

}, 10, 2 );
6
richardW8k