2013-02-28 12 views
5

Mam formularz wielostronicowy.Gravity Forms - Uzyskaj aktualny numer strony

Chciałbym wykonać niestandardowy JavaScript na ostatniej stronie tego formularza. Teoretycznie wszystko, co muszę zrobić, to pobrać aktualny numer strony i napisać warunkową.

Proste, prawda? Najwyraźniej nie.

Mój oryginalny obejście było tak:

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

ale $('...').css('display') powraca undefined na każdy elementem Próbowałem to na w formie. Własne skrypty były uruchamiane za każdym razem, gdy użytkownik kliknął przycisk "Dalej". Bez cygara.

Następnie po przejrzeniu the Gravity Forms documentation znalazłem dwa przydatne zdarzenia: gform_post_render i gform_page_loaded.

Jednak dokumentacja nie zawiera instrukcji dotyczących dostępu do parametrów.

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

Ponadto nie mając prawidłowy kod, ja też podejrzewam, nie mam kod w odpowiednim miejscu jak również bezskutecznie próbowała następujące w functions.php aw 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); 
?> 

Pytanie:

Jaki kod muszę pobrać aktualny numer strony, a co ważniejsze, gdzie mogę umieścić ten kod?

Odpowiedz

4

Mam to.

Funkcja rgpost ma najwyraźniej kluczowe znaczenie w uzyskiwaniu dostępu do bieżącego numeru strony. Po pewnym błędzie na własną rękę, udało mi się uzyskać następujący kod działający zarówno w function.php, jak i tuż przed funkcją wp_head() w 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'); 

Jeśli kopiowanie/wklejanie kodu powyżej, upewnij się, że:

  • zastąpić 10 ze strony, którą chcesz sprawdzić
  • upewnić się czy parametry są prawidłowe w wp_enqueue_script
  • zastąpić 63 swoim identyfikatorem formularza:

Niektóre zasoby s znalazłem przydatne:

+1

I rzeczywiście pomyśleć nad odpowiedzią McNab jest lepszy. :) –

0

pisałem trochę funkcję, która zwraca bieżącą stronę:

// 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

W PO przyjął odpowiedź może dobrze działać, ale to nie działa, jeśli masz konfigurację formularz na strony przy użyciu Ajax.

W takim przypadku mogłem uzyskać tylko to działa przy użyciu Javascript i poniższej metody;

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

Można oczywiście użyć parametru formId ograniczyć to do specyficznej formy

Powiązane problemy