Не используйте 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)
будет выполняться и только после того, как они оба закончат, будет выполнено перенаправление.