Complemento de formularios de gravedad: el campo de formulario de relleno dinámico no funciona

4 minutos de lectura

avatar de usuario
usuario1832297

Tengo algunos problemas con mi formulario Gravity Forms. Es un formulario de varias páginas y necesito completar un campo en la página 2 usando los valores de publicación de la página 1. Pero no funciona. Por supuesto, el campo en la página 2 está configurado para “Permitir que el campo se complete dinámicamente” y el parámetro del campo está configurado en “nombre”. Aquí está mi código:

add_filter('gform_field_value_name', 'name_population_function');
function name_population_function($value){
    $name = $_POST['input_2'] . ' ' . ( ! empty( $_POST['input_3'] ) ? ( $_POST['input_3'] . ' ' ) : NULL ) . $_POST['input_1'];
    return $name;
}

Cuando imprimo el valor de $name variable usando var_dump($name); en realidad es correcto

Si cambio el $name a $name="Last Middle First"; está poblando el campo como debería.

Gracias por tu ayuda.

EDITAR: para fines de prueba, cambié mi código a:

add_filter('gform_field_value_name', 'name_population_function');
function name_population_function($value){
    $name="Test";
    if ( ! empty( $_POST['input_1'] ) && ! empty( $_POST['input_2'] ) ) {
        $name = $_POST['input_2'] . ' ' . ( ! empty( $_POST['input_3'] ) ? ( $_POST['input_3'] . ' ' ) : NULL ) . $_POST['input_1'];
    //var_dump( $name );
    }
    return $name;
}

Si descomento la línea con var_dump el valor de la variable $name está nuevamente configurado correctamente, pero el campo en la página 2 se completa previamente con el valor Test. Probablemente este filtro también se llame en la página 1, ¿es posible que el complemento almacene en caché este valor? No uso un complemento de almacenamiento en caché, así que no sé por qué no funciona.

  • Cuando descargas var, ¿lo haces en la segunda página o en la primera?

    – nombre_usuario_aleatorio

    17 de noviembre de 2012 a las 18:34

  • El var_dump se colocó en name_population_function en el archivo function.php justo antes del return y la primera página ya fue enviada.

    – usuario1832297

    17 de noviembre de 2012 a las 23:43

  • Perdón por publicar tarde, pero en caso de que alguien más tenga este problema, descubrí que el uso de la publicación AJAX en realidad no publica contenido de una página a otra, sino que solo muestra/oculta partes del formulario para dar la apariencia de páginas. Deshabilitar la publicación de AJAX me permitió completar campos de una página a una página posterior. Si realmente necesita habilitar la publicación de AJAX, es posible que deba usar los ganchos de JavaScript para que esto funcione.

    – mj7

    27 de agosto de 2013 a las 12:14

avatar de usuario
1joshyoung

En lugar de tener el formulario en varias páginas, puede usar jQuery para crear la impresión de varias páginas con .hide o .slideToggle. Esto resolvería su problema y facilitaría mucho el envío de los datos del formulario. Luego simplemente llame al valor de las entradas anteriores.

Podría usar una cadena de consulta para conservar los datos y completar el campo dinámicamente.

http://siteurl.com/form-url/?your_parameter=value

add_filter('gform_field_value_author_email', 'populate_post_author_email');
function populate_post_author_email($value){
global $post;

$author_email = get_the_author_meta('email', $post->post_author);

return $author_email;
}

avatar de usuario
jeffwebson

Pruebe este filtro gform_pre_render en su lugar. Agrega un filtro al formulario ID 7. Reemplace 7 con el ID de su formulario Gravity.

add_filter('gform_pre_render_7', 'populate_form_pre_render');

function populate_form_pre_render($form){
  $name="";
  foreach ($form['fields'] as &$field)
  {
     // replace 2 with the actual ID of your form field 
    if ( 2 == $field['id'] ){
      if ( ! empty( $_POST['input_1'] ) && ! empty( $_POST['input_2'] ) ) {
         $name = $_POST['input_2'] . ' ' . ( ! empty( $_POST['input_3'] ) ? ($_POST['input_3'] . ' ' ) : NULL ) . $_POST['input_1'];
        //var_dump( $name );
      }
      $field['defaultValue']=$name;
  echo '<pre>';
  print_r($field);
  echo '</pre>';
   }    

 }

 return $form;
}

  • ¿Por qué en foreach ($formulario[‘fields’] como &$campo) ¿estás pasando $campo por referencia? Solo me pregunto por qué hacerlo.

    – therones

    17/04/2014 a las 22:10


  • Porque está cambiando el valor del campo y luego, al final de la función, está devolviendo el objeto $form modificado. Si pasó por valor, sus cambios se perderían.

    – Miguel

    31 de marzo de 2021 a las 10:53

¿Ha sido útil esta solución?