Gravity Forms – Holen Sie sich die aktuelle Seitenzahl

Lesezeit: 5 Minuten

Benutzeravatar von user110857
Benutzer110857

Ich habe ein mehrseitiges Formular.

Ich möchte auf der letzten Seite dieses Formulars ein benutzerdefiniertes JavaScript ausführen. Theoretisch muss ich nur die aktuelle Seitenzahl abrufen und eine Bedingung schreiben.

Einfach, oder? Scheinbar nicht.

Meine ursprüngliche Problemumgehung war wie folgt:

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

aber $('...').css('display') kehrt zurück undefined an jeder Element, an dem ich das innerhalb des Formulars ausprobiert habe. Benutzerdefinierte Skripte wurden jedes Mal ausgelöst, wenn der Benutzer auf die Schaltfläche „Weiter“ klickte. Keine Zigarre.

Dann nach Überprüfung die Gravity Forms-Dokumentationhabe ich zwei nützlich aussehende Ereignisse gefunden: gform_post_render und gform_page_loaded.

Die Dokumentation enthält jedoch keine Anweisungen zum Zugriff auf die Parameter.

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

Abgesehen davon, dass ich nicht den richtigen Code habe, vermute ich auch, dass ich den Code nicht an der richtigen Stelle habe, da ich auch Folgendes in functions.php und in header.php erfolglos versucht habe (wie die Dokumentation vermuten lässt):

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

Frage:

Welchen Code benötige ich, um die aktuelle Seitenzahl abzurufen, und was noch wichtiger ist, wo platziere ich diesen Code?

  • Dafür ist das Schließen einer Frage nicht da. Fragen werden geschlossen, wenn sie nicht zum Thema gehören oder aufgrund fehlender Informationen nicht beantwortet werden können. Es ist ein Zeichen dafür, dass etwas mit der Frage nicht stimmt. Wenn Sie nicht mehr mit der Frage interagieren möchten, können Sie sie einfach ignorieren.

    – Modus Tollens

    7. Januar um 22:18 Uhr

Benutzeravatar von user110857
Benutzer110857

Ich habe es verstanden.

Die Funktion rgpost ist offenbar entscheidend für den Zugriff auf die aktuelle Seitenzahl. Nach einigem Rumprobieren konnte ich den folgenden Code sowohl in functions.php als auch direkt vor der Funktion wp_head() in header.php zum Laufen bringen.

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

Wenn Sie den obigen Code kopieren/einfügen, stellen Sie Folgendes sicher:

  • ersetzen 10 mit der Seite, die Sie überprüfen möchten
  • Stellen Sie sicher, dass Ihre Parameter korrekt sind wp_enqueue_script
  • ersetzen 63 mit Ihrer Formular-ID

Einige Ressourcen, die ich nützlich fand:

  • Ich denke tatsächlich, dass McNabs obige Antwort besser ist. 🙂

    – ChrisRae

    14. April 2015 um 17:50 Uhr

  • Dies funktioniert nicht richtig, wenn jemand auf die vorherige Schaltfläche klickt und dann erneut auf weiter klickt, die Seitenzahlen steigen um 1 ab.

    – Enchiridion

    25. August 2018 um 0:31 Uhr

Die vom OP akzeptierte Antwort funktioniert möglicherweise gut, funktioniert jedoch nicht, wenn Sie das Formular zum Paginieren mit Ajax eingerichtet haben.

In diesem Fall konnte ich es nur mit Javascript und der folgenden Methode zum Laufen bringen;

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

Die könntest du natürlich verwenden formId Parameter, um dies auf ein bestimmtes Formular zu beschränken

  • Kann ich den Benutzer zur direkten letzten Seite umleiten? Was wäre die URL der letzten Seite?

    – Parthavi Patel

    23. September 2021 um 10:21 Uhr

Die aktuell akzeptierte Antwort funktioniert nur, wenn der Benutzer nie zu einer vorherigen Seite im Formular wechselt, wenn doch, dann gform_sourge_page_number hinkt immer um eins hinterher. Ich habe eine bessere Lösung gefunden (mit diesem Hook als Beispiel, aber Sie sollten ihn in jedem Hook verwenden können, an den das $-Formular übergeben wird):

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 ) ist eine von vielen praktischen undokumentierten Funktionen.

Ich habe eine kleine Funktion geschrieben, die die aktuelle Seite zurückgibt:

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

Neben der akzeptierten Antwort finden Sie hier ein Beispiel zum Suchen der aktuellen Seite und zum dynamischen Suchen, wie viele Seiten das Formular enthält. In diesem Beispiel wird der Schaltflächentext basierend darauf geändert, ob es sich um die letzte Seite des Formulars handelt, anstatt ein Skript einzureihen.

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

Benutzeravatar von aakash
aakasch

Folgender Code funktioniert bei mir in JavaScript:

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

Es gibt Ihnen die Seitenzahl der aktuellen Seite in mehrseitiger Form.

Benutzeravatar von Suresh Suthar
Suresh Suthar

Verwendung von Jquery

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

1394470cookie-checkGravity Forms – Holen Sie sich die aktuelle Seitenzahl

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy