Gravity Forms – Obtenga el número de página actual

5 minutos de lectura

avatar de usuario
usuario110857

Tengo un formulario de varias páginas.

Me gustaría ejecutar JavaScript personalizado en la última página de este formulario. Teóricamente, todo lo que tengo que hacer es recuperar el número de página actual y escribir un condicional.

Sencillo, ¿verdad? Aparentemente no.

Mi solución original era así:

if ($('gform_page').last().css('display') !== 'none') {
    // perform custom scripts now that the last
    // Gravity Form page is being shown
}

pero $('...').css('display') devoluciones undefined en cada elemento en el que probé esto dentro del formulario. Se activaban secuencias de comandos personalizadas cada vez que el usuario presionaba el botón “Siguiente”. Sin cigarro.

Luego, después de revisar la documentación de Gravity Formsencontré dos eventos de aspecto útil: gform_post_render y gform_page_loaded.

Sin embargo, la documentación no da instrucciones sobre cómo acceder a los parámetros.

jQuery(document).bind('gform_page_loaded', function(event, form_id, current_page){
    console.log(current_page);
    // returns nothing when loaded in the footer
    // returns [Object, object] when placed in an HTML field in the form
});

Además de no tener el código correcto, también sospecho que no tengo el código en el lugar correcto ya que también probé infructuosamente lo siguiente en functions.php y en header.php (como sugiere la documentación):

<?php
function enqueue_custom_script($form, $is_ajax){
    if ($is_ajax) :
        echo '<script>console.log(current_page);</script>';
    endif;
}
add_action("gform_enqueue_scripts", "enqueue_custom_script", 10, 2);
?>

Pregunta:

¿Qué código necesito para recuperar el número de página actual y, lo que es más importante, dónde coloco ese código?

  • Para eso no sirve cerrar una pregunta. Las preguntas se cierran cuando están fuera del tema o no se pueden responder debido a la falta de información. Es una señal de que algo anda mal con la pregunta. Si ya no desea interactuar con la pregunta, está bien simplemente ignorarla.

    – Modo Tollens

    7 ene a las 22:18

avatar de usuario
usuario110857

Lo tengo.

La función rgpost es, aparentemente, crucial para acceder al número de página actual. Después de un poco de confusión por mi cuenta, pude hacer que el siguiente código funcionara tanto en functions.php como justo antes de la función wp_head() en header.php.

function run_script_on_last_page($form) {
    if (!is_admin()) {
        $current_page = rgpost('gform_source_page_number_' . $form['id']) ? rgpost('gform_source_page_number_' . $form['id']) : 1;
        if ($current_page == 10) {
            wp_enqueue_script('custom_script', get_template_directory_uri() . '/js/custom_script.js', array('jquery'), null, true);
        }
    }
}
add_action('gform_enqueue_scripts_63', 'run_script_on_last_page');

Si está copiando/pegando el código anterior, asegúrese de:

  • reemplazar 10 con la página que quieres consultar
  • asegúrese de que sus parámetros sean correctos en wp_enqueue_script
  • reemplazar 63 con su ID de formulario

Algunos recursos que encontré útiles:

  • De hecho, creo que la respuesta anterior de McNab es mejor. 🙂

    – Chris Rae

    14/04/2015 a las 17:50

  • Esto no funciona correctamente si alguien hace clic en el botón anterior y luego vuelve a hacer clic en siguiente, los números de página bajan en 1.

    – Enchiridión

    25 de agosto de 2018 a las 0:31

La respuesta aceptada de los OP bien podría funcionar, pero no funciona si tiene la configuración del formulario para paginar usando Ajax.

En ese caso, solo pude hacerlo funcionar usando Javascript y el siguiente método;

http://www.gravityhelp.com/documentation/page/Gform_post_render

jQuery(document).bind('gform_post_render', function (event, formId, current_page) {
    if (current_page == 2) {
        // do something
    }
});

Por supuesto, podrías usar el formId parámetro para limitar esto a una forma específica

  • ¿Puedo redirigir al usuario a la última página directa? ¿Cuál sería la URL de la última página?

    – Parthavi Patel

    23 de septiembre de 2021 a las 10:21

La respuesta actualmente aceptada solo funciona si el usuario nunca va a una página anterior en el formulario, si lo hace, entonces gform_sourge_page_number siempre se retrasa en uno. Encontré una mejor solución (usando este enlace como ejemplo, pero debería poder usarlo dentro de cualquier enlace que tenga el formulario $ pasado):

function run_script_on_last_page( $form)  {
  if ( !is_admin() ) {
    if ( \GFFormDisplay::get_current_page( $form['id'] ) == 10) {
        wp_enqueue_script( 'custom_script', get_template_directory_uri() . '/js/custom_script.js', array( 'jquery' ), null, true );
    }
  }
}

add_action( 'gform_enqueue_scripts_63', 'run_script_on_last_page' );

GFFormDisplay::get_current_page( $form_id ) es una de las muchas funciones prácticas no documentadas.

Escribí una pequeña función que devuelve la página actual:

// Get Gravity Forms Current Page
// Syntax: gf_current_page()
function gf_get_current_page()
{
    return rgpost('gform_source_page_number_' . $_POST['gform_submit']) ? rgpost('gform_target_page_number_' . $_POST['gform_submit']) : 1;
}

Además de la respuesta aceptada, aquí hay un ejemplo de cómo encontrar la página actual y encontrar dinámicamente cuántas páginas hay en el formulario. Este ejemplo cambia el texto del botón en función de si es la última página del formulario, en lugar de poner en cola un script.

// Change the text of the 'Next' form button to 'Submit' when
// the current page is the final page of the form
add_filter( 'gform_next_button', 'next_to_submit', 10, 2 );
function next_to_submit( $next_button, $form ) {
    $replacement_next_button = $next_button;
    $last_page_number = 1;
    foreach ($form['fields'] as $field) {
        $is_hidden = RGFormsModel::is_field_hidden( $form, $field, array() );
        if ($field['pageNumber'] > $last_page_number && !$is_hidden) {
            $last_page_number = $field['pageNumber'];
        }
    }
    $current_page_number = rgpost('gform_source_page_number_' . $form['id']) ? rgpost('gform_source_page_number_' . $form['id']) : 1;
    if ($last_page_number === $current_page_number) {
        // If the current page is the final page
        $replacement_next_button = str_replace( 'Next', 'Submit', $next_button );
    }
    return $replacement_next_button;
}

avatar de usuario
aakash

El siguiente código me funciona en JavaScript:

$('.gf_step_active .gf_step_number').html()

Le dará el número de página de la página actual en forma de varias páginas.

avatar de usuario
Suresh Suthar

Usando Jquery

  var current_page_ = 1+parseInt(jQuery('.gform_page:visible').index());

¿Ha sido útil esta solución?