Gravity-Formular-Plug-in – Das dynamische Ausfüllen von Formularfeldern funktioniert nicht

Lesezeit: 3 Minuten

Benutzeravatar von user1832297
Benutzer1832297

Ich habe einige Probleme mit meinem Gravity Forms-Formular. Es ist ein mehrseitiges Formular, und ich muss ein Feld auf Seite 2 mit Beitragswerten von Seite 1 ausfüllen. Aber es funktioniert nicht. Natürlich ist das Feld auf Seite 2 auf “Dynamisches Auffüllen des Feldes zulassen” konfiguriert und der Parameter des Feldes ist auf “Name” gesetzt. Hier ist mein Code:

add_filter('gform_field_value_name', 'name_population_function');
function name_population_function($value){
    $name = $_POST['input_2'] . ' ' . ( ! empty( $_POST['input_3'] ) ? ( $_POST['input_3'] . ' ' ) : NULL ) . $_POST['input_1'];
    return $name;
}

Wenn ich den Wert von drucke $name Variable verwenden var_dump($name); es ist eigentlich richtig.

Wenn ich die ändere $name zu $name="Last Middle First"; es füllt das Feld wie es sollte.

Danke für Ihre Hilfe.

EDIT: Zu Testzwecken habe ich meinen Code geändert in:

add_filter('gform_field_value_name', 'name_population_function');
function name_population_function($value){
    $name="Test";
    if ( ! empty( $_POST['input_1'] ) && ! empty( $_POST['input_2'] ) ) {
        $name = $_POST['input_2'] . ' ' . ( ! empty( $_POST['input_3'] ) ? ( $_POST['input_3'] . ' ' ) : NULL ) . $_POST['input_1'];
    //var_dump( $name );
    }
    return $name;
}

Wenn ich die Zeile mit auskommentiere var_dump der Wert der Variablen $name wieder richtig gesetzt, aber das Feld auf Seite 2 ist mit Wert vorbelegt Test. Wahrscheinlich wird dieser Filter auch auf Seite 1 aufgerufen, ist es also möglich, dass das Plugin diesen Wert zwischenspeichert? Ich verwende kein Caching-Plugin, also weiß ich nicht, warum es nicht funktioniert.

  • Wenn Sie var dump machen, tun Sie es auf der zweiten Seite oder auf der ersten Seite?

    – zufälliger_Benutzername

    17. November 2012 um 18:34 Uhr

  • Der var_dump wurde in name_population_function in der Datei function.php direkt vor dem platziert return und die erste Seite wurde auch schon verschickt.

    – Benutzer1832297

    17. November 2012 um 23:43 Uhr

  • Tut mir leid, dass ich zu spät gepostet habe, aber falls jemand anderes dieses Problem hat, habe ich festgestellt, dass die Verwendung von AJAX-Posting Inhalte nicht wirklich von Seite zu Seite postet, sondern nur Teile des Formulars ein-/ausblendet, um das Aussehen von Seiten zu geben. Durch das Deaktivieren des AJAX-Postings konnte ich Felder von einer Seite auf eine spätere Seite füllen. Wenn Sie AJAX-Posting wirklich aktivieren müssen, müssen Sie möglicherweise die JavaScript-Hooks verwenden, damit dies funktioniert.

    – mj7

    27. August 2013 um 12:14 Uhr

Benutzeravatar von 1joshyoung
1joshyoung

Anstatt das Formular über mehrere Seiten zu haben, könnten Sie mit jQuery den Eindruck mehrerer Seiten erzeugen .hide oder .slideToggle. Dies würde Ihr Problem lösen und das Absenden der Formulardaten erheblich vereinfachen. Rufen Sie dann einfach den Wert aus vergangenen Eingaben auf.

Sie könnten eine Abfragezeichenfolge verwenden, um die Daten beizubehalten und das Feld dynamisch zu füllen.

http://siteurl.com/form-url/?your_parameter=value

add_filter('gform_field_value_author_email', 'populate_post_author_email');
function populate_post_author_email($value){
global $post;

$author_email = get_the_author_meta('email', $post->post_author);

return $author_email;
}

Benutzeravatar von Jeff Webson
Jeff Webson

Probieren Sie stattdessen diesen gform_pre_render-Filter aus. Es fügt der Formular-ID 7 einen Filter hinzu. Ersetzen Sie 7 durch die ID Ihres Gravity-Formulars.

add_filter('gform_pre_render_7', 'populate_form_pre_render');

function populate_form_pre_render($form){
  $name="";
  foreach ($form['fields'] as &$field)
  {
     // replace 2 with the actual ID of your form field 
    if ( 2 == $field['id'] ){
      if ( ! empty( $_POST['input_1'] ) && ! empty( $_POST['input_2'] ) ) {
         $name = $_POST['input_2'] . ' ' . ( ! empty( $_POST['input_3'] ) ? ($_POST['input_3'] . ' ' ) : NULL ) . $_POST['input_1'];
        //var_dump( $name );
      }
      $field['defaultValue']=$name;
  echo '<pre>';
  print_r($field);
  echo '</pre>';
   }    

 }

 return $form;
}

  • Warum in foreach ($form[‘fields’] als &$field) übergeben Sie $field als Referenz? Ich frage mich nur, warum man es tut?

    – Theronen

    17. April 2014 um 22:10 Uhr


  • Weil Sie den Wert des Felds ändern und dann am Ende der Funktion das modifizierte $form-Objekt zurückgeben. Wenn Sie nach Wert übergeben, gehen Ihre Änderungen verloren.

    – Mike

    31. März 2021 um 10:53 Uhr

1389530cookie-checkGravity-Formular-Plug-in – Das dynamische Ausfüllen von Formularfeldern funktioniert nicht

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

Privacy policy