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?
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:
- esta sección de la documentación para la
gform_validation
filtrar - la documentación para
gform_enqueue_scripts
.
-
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;
}
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.
Suresh Suthar
Usando Jquery
var current_page_ = 1+parseInt(jQuery('.gform_page:visible').index());
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