2012-03-30 7 views
1

Ich habe ein Formular erstellen, wie:drupal form action

function create_custom_form($form, &$form_state) { 
    $form['#action'] = "#"; 
     .... 
} 

function create_custom_form_validate($form, &$form_state) { 
     .... 
} 

function create_custom_form_submit($form, &$form_state) { 
     .... 
     if(..) 
      drupal_goto('abc'); 
     else 
      drupal_goto('xxx'); 
} 

, wenn ich dieses Formular vor Drupal aktiv und nach meiner Funktion lesen ... wie ich die Aktion-Form umgehen kann und nur lesen eine _submit-Funktion?

+0

Fügen Sie den Handler zu Ihrer Submit-Schaltfläche durch '$ form ['submit'] = array ('create_custom_form_submit');'. –

Antwort

2

Verwenden Sie nicht , da möglicherweise weitere "Senden" -Rückrufe ausgeführt werden müssen. Die Funktion unterbricht diese.

Verwenden Sie stattdessen die $form_state['redirect'] = ... http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_redirect_form/7

function create_custom_form_submit($form, &$form_state) { 
     .... 
     if(..) 
      $form_state['redirect'] = 'abc'; 
     else 
      $form_state['redirect'] = 'xxx'; 
} 

Da diese Funktion die gleiche Form ID (create_custom_form) hat - mit dem Wort „_submit“ angehängt, dann wird diese Funktion automatisch ausgeführt werden und so besteht keine Notwendigkeit, Hinzufügen von Rückmeldungsrückrufen in das Formular.

Wenn Sie möchten, dass eine zusätzliche Funktion beim Senden ausgeführt wird, sollten Sie tun, wie Hamza vorgeschlagen hat, nur Ihre zusätzliche Funktion wird einen anderen Namen haben. z.B.

function create_custom_form($form, &$form_state) { 
    $form['#action'] = "#"; 
    .... 
    // Add any additional callbacks to call before any redirects happen 
    $form['#submit'][] = 'create_custom_form_additional_submit_callback';  
    $form['#submit'][] = ... 
} 

function create_custom_form_additional_submit_callback($form, &$form_state) { 
    // Do something before redirect 
    ... 
} 

Im obigen Beispiel:

  • create_custom_form_additional_submit_callback

UND

  • create_custom_form_submit (weil seine bekam den gleichen Namen mit '_submit' angehängt)

wird ausgeführt und erst wenn beide beendet sind, wird die Weiterleitung ausgeführt.

+0

Ich habe versucht, mit $ form_state ['Redirect'], aber ich habe das gleiche Problem ... wenn ich die Form Aktion mit einer gefälschten Seite Drupal Redirect in dieser gefälschten Seite ändern und nicht die Weiterleitung oder goto folgen .. Ich denke, bevor Aktion und nach Überprüfung _submit ... – Stefano

+0

Wenn Sie die Formularaktion auf einen Hash "#" festlegen, wird die Seite an sich selbst jedoch der Server und Drupal wird nie Ihre "#" sehen, obwohl es in der URL Es ist kein sichtbares Zeichen für Ihren Server. Da Drupal nach einem # sucht, das es nie finden wird, werden Ihre Sendehaken niemals ausgelöst. Wenn Sie feststellen möchten, ob das Formular von anderen Skripten auf Ihrer Seite eingereicht wurde, legen Sie die Aktion auf "? Submitted = 1" fest. –

Verwandte Themen