Obtener valores seleccionados de casillas de verificación y botones de radio a través de Gravity Forms gform_after_submission hook [cerrado]

2

Gravity Forms ofrece una documentación razonablemente buena y, por supuesto, Google ofrece más información sobre cómo los desarrolladores han resuelto otros desafíos relacionados con este complemento, pero debemos lograr lo que parece una tarea relativamente simple, pero no podemos encontrar ningún método documentado para hacerlo. .

Estamos utilizando el enlace gform_after_submission para abrir una transacción a un servicio web SOAP para transmitir algunos de los valores de formulario enviados.

El punto en el que estamos bloqueados ahora es obtener el valor (o valores) seleccionado de la radio y las casillas de verificación (y también, presumiblemente, <select> 's).

Gravity Forms usa un sistema para pasar los campos por ID y usa puntos decimales para pasar valores de radios, por ejemplo:

Nombre de campo: Prefijo - ID de campo: 1 - Valores de campo: 1.1 "Mr.", 1.2 "Mrs."

Gravity Forms pasa una matriz de valores al gancho, si el "Sr." Se selecciona la opción estos son:

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

Pero el Array no tiene indicación de qué valor se seleccionó, simplemente pasa una cadena para ambos.

No es un problema de este tipo cuando solo se trata de 2 valores, pero los campos pueden contener cientos de valores y el cliente puede actualizar estos valores a través de la interfaz de administración.

La búsqueda en el código base de Gravity Forms muestra algunas posibilidades, como:

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

Esto requiere el objeto $ lead, que también se llama el objeto $ entry, está disponible, pero el método no devuelve el valor correcto, citando los datos faltantes

Otra opción es:

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

Sin embargo, esto requiere que pasemos un objeto $ field con el formato correcto, que forma parte del objeto $ form, pero nuevamente, no es la ruta más limpia.

Una idea es buscar en el objeto $ _POST los valores enviados, esto solo incluye los valores establecidos y no los vacíos, por lo que en el caso de Prefijo:

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

Una solución sólida dependería de la información sobre el campo almacenado dentro de los Formularios de Gravedad, como el número de valores que tiene cada campo: haga un bucle sobre ellos y verifique si cada uno tiene un valor establecido, antes de devolver una cadena formateada con cada valor seleccionado separado por una coma.

Quizás Gravity Forms ya tiene una solución preexistente para este problema, sin embargo, no hay nada en la documentación, ¡cualquier información es bienvenida!

    
pregunta Q Studio 27.11.2015 - 14:07

1 respuesta

6

Si tiene el objeto formulario / campo, puede recuperar una cadena separada por comas que contiene las opciones de los campos seleccionados utilizando el método GF_Field :: get_value_export () que se agregó en Gravity Forms 1.9.13.

Si solo lo va a utilizar con uno o dos campos, podría hacer algo como esto:

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

Lo anterior devolvería los valores para las opciones seleccionadas. Si desea devolver el texto de opción, establecerá el tercer parámetro de get_value_export () en verdadero, por ejemplo,

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

Si necesita acceder a todos los valores de campo en la entrada, pero desea que los tipos de campo relevantes formateados utilicen el texto de elección, entonces podría hacer algo como esto:

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 );
    
respondido por el richardW8k 27.11.2015 - 16:36

Lea otras preguntas en las etiquetas