xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Как навесить на одну из форм свой обработчик (submit callback)

Опубликовано в
/**
 * Implements hook_form_FORM_ID_alter().
 */
function modulename_form_[FORM_ID]_alter(&$form, &$form_state) {
  // добавить свой обработчик ПОСЛЕ основного
  $form['#submit'][] = 'modulename_mysubmit';
 
  // добавить свой обработчик ПЕРЕД основным
  array_unshift($form['#submit'], 'modulename_mysubmit');
 
  // добавить свой обработчик ВМЕСТО основного
  $key = array_search('[FORM_ID]_submit', $form['#submit']);
  $form['#submit'][$key] = 'modulename_mysubmit';
}

Вместо [FORM_ID] нужно прописать id формы.

Написанное актуально для Drupal 6, Drupal 7
Похожие записи

Комментарии RSS

Спасибо большое, очень помогло.
Побольше бы таких мелочей, необходимость в которых внезапно возникает, а знаний в голове нема, времени искать мало. Поиск и оп - профит)

А можно ли в validate изменить #action?

function mymodule_validate(&$form, &$form_state) {
  // вместо внутренней ссылки на внешний домен
  $form['#action'] = 'http://newsite.ru/test.php';
  // и добавить какие то данные 
  $form['newparametr'] = array(
    '#type' => 'hidden',
    '#value' => '12345',
  );
}

Почему то он его не видит?

Потому что если $form['#action'] = 'http://newsite.ru/test.php'; - то ни какой валидации не будет. - все отправится на другой сервер.
Сделал через добавление $form_state['redirect'] = 'http://newsite.ru/test.php';

А Drupal это он или она? :-)

Друпал - бесполое божество))

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании