друпал форма действия - PullRequest
1 голос
/ 30 марта 2012

Я создал форму наподобие:

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

, когда я отправляю эту форму drupal перед тем, как перейти к действию и после прочтения своей функции ... как я могу обойти форму действия и читать только_submit функция?

1 Ответ

2 голосов
/ 30 марта 2012

Не используйте drupal_goto , так как может быть больше обратных вызовов "submit" для выполнения. Функция drupal_goto прервет их.

Вместо этого используйте $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';
}

Поскольку эта функция имеет тот же идентификатор формы (create_custom_form) - со словом «_submit», добавленным тогда, эта функция будет выполняться автоматически, поэтому нет необходимости добавлять какие-либо обратные вызовы отправки в форму.

Если вы хотите, чтобы при отправке выполнялась дополнительная функция, вам следует поступить так, как предложил Hamza, и только ваша дополнительная функция будет иметь другое имя. например,

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

В приведенном выше примере:

  • create_custom_form_additional_submit_callback

И

  • create_custom_form_submit (потому что он получил то же имя с добавленным _submit)

будет выполняться и только после того, как они оба закончат, будет выполнено перенаправление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...