2013-02-28 18 views
5

Ho un modulo a più pagine.Gravity Forms - Ottieni numero pagina corrente

Vorrei eseguire alcuni JavaScript personalizzati nell'ultima pagina di questo modulo. In teoria, tutto ciò che devo fare è recuperare il numero di pagina corrente e scrivere un condizionale.

Semplice, giusto? Apparentemente no.

mia soluzione originale era così:

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

ma $('...').css('display') rendimenti undefined su ogni elemento che ho provato questo su all'interno della forma. Gli script personalizzati venivano attivati ​​ogni volta che l'utente preme il pulsante "Avanti". Niente sigaro

Quindi, dopo aver esaminato the Gravity Forms documentation, ho trovato due eventi dall'aspetto molto utile: gform_post_render e gform_page_loaded.

Tuttavia, la documentazione non dà istruzioni su come accedere ai parametri.

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 
}); 

Oltre a non avere il codice corretto, sospetto anche non ho il codice nel punto preciso Inoltre ho inutilmente provato quanto segue in functions.php in header.php (as the documentation suggests) :

<?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); 
?> 

domanda:

Quale codice ho bisogno di recuperare il numero di pagina corrente, e ancora più importante, dove faccio a piazzare quel codice?

risposta

4

ho capito.

La funzione rgpost è, a quanto pare, fondamentale nell'accesso al numero di pagina corrente. Dopo un po 'confusionaria in giro per conto mio, sono stato in grado di ottenere il seguente codice di lavoro sia in functions.php e appena prima la funzione wp_head() in 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'); 

Se siete copiare/incollare il codice di cui sopra, assicurarsi di:

  • sostituire 10 con la pagina che si desidera controllare
  • garantire i parametri siano corretti in wp_enqueue_script
  • sostituire 63 con il modulo ID

Alcune risorse s ho trovato utile:

+1

Io in realtà penso la risposta di McNab di cui sopra è uno migliore. :) –

0

ho scritto una piccola funzione che restituisce la pagina corrente:

// 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; 
} 
2

I PO risposta accettata potrebbe anche funzionare, ma non funziona se avete la configurazione modulo per impaginare con Ajax.

In tal caso, ho potuto farlo funzionare solo utilizzando Javascript e il seguente metodo;

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 
    } 
}); 

Si potrebbe naturalmente utilizzare il parametro formId per limitare questo per una forma specifica

Problemi correlati