2012-11-17 28 views
9

Mam pewne problemy z formularzem formularzy Gravity Forms. Jest to formularz wielostronicowy i muszę wypełnić pole na stronie 2, używając wartości postów ze strony 1. Ale to nie działa. Oczywiście pole na stronie 2 jest skonfigurowane do "Pozwól na dynamiczne wypełnianie pola", a parametr pola jest ustawiony na "name". Oto mój kod:Wtyczka formularzy grawitacyjnych - dynamiczne wypełnianie pól formularza nie działa

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

Kiedy drukować wartość zmiennej $name użyciu var_dump($name); to rzeczywiście poprawna.

Jeśli zmienię $name na $name = 'Last Middle First';, wypełniam pole tak, jak powinno.

Dziękuję za pomoc.

EDIT: Dla celów testowych zmieniłem mojego kodu:

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

Gdybym odkomentuj linię var_dump wartość zmiennej $name ponownie ustawiony prawidłowo, ale pole na stronie 2 jest oznakowane wartość Test. Prawdopodobnie ten filtr jest również wywoływany na stronie 1, więc czy jest możliwe, że wtyczka buforuje tę wartość? Nie używam wtyczki do buforowania, więc nie wiem, dlaczego to nie działa.

+1

Kiedy wyświetla się var dump, czy robisz to na drugiej stronie, czy na pierwszej stronie? –

+0

Plik var_dump został umieszczony w funkcji nazwa_populacji_w_obiekcie w pliku function.php tuż przed 'return' i pierwsza strona została już wysłana. – user1832297

+4

Przepraszamy za późne wysłanie, ale na wypadek, gdyby ktoś inny miał ten problem, stwierdziłem, że używanie wysyłania AJAX nie powoduje publikowania treści ze strony na stronę, ale pokazuje/ukrywa części formularza, aby nadać wygląd stronom. Wyłączenie wysyłania AJAX pozwoliło mi wypełnić pola z jednej strony na stronę późniejszą. Jeśli naprawdę potrzebujesz włączenia publikowania AJAX, być może będziesz musiał użyć haseł JavaScript, aby to zadziałało. – mj7

Odpowiedz

-1

Spróbuj użyć tego filtra gform_pre_render. Dodaje filtr, aby utworzyć ID 7. Zastąp 7 swoim ID formularza Grawitacji.

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; 
} 
+0

Dlaczego w foreach ($ form ['fields'] jako & $ pole) podajesz pole $ przez odniesienie? Zastanawiam się, dlaczego to robię? – therons

+0

Filtr nie działa – EHerman

0

Możesz użyć ciągu zapytania, aby utrwalić dane i wypełnić pole dynamicznie.

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

Zamiast formularza na wielu stronach, można użyć jQuery aby stworzyć wrażenie wielu stron z .hide lub .slideToggle. Rozwiązałoby to Twój problem i znacznie ułatwi wysyłanie danych formularza. Następnie po prostu wywołaj wartość z poprzednich danych wejściowych.