Редактировать: Более тщательная проверка документации API форм показала, что мой первоначальный ответ ниже действителен для Drupal 6, но только частично действителен для Drupal 5. Сравнение документов Drupal 5 с помощью Drupal 6 docs видно, что в Drupal 5 вы можете регистрировать только функции обратного вызова в самой форме - свойство кнопки #submit является просто логическим значением, указывающим, что кнопка должна обрабатываться как кнопка отправки. Таким образом, добавление обратных вызовов «за кнопку» - это только функция Drupal 6!
Для данного Вопроса это означает, что есть только опция if / elseif, предложенная ax, или вариант регистрации двух обратных вызовов submit для формы, каждая из которых проверяет, вызваны ли они для права. кнопка (в основном версия if / elseif, но с использованием двух отдельных обратных вызовов).
(первоначальный ответ)
Здесь работают несколько механизмов:
- Отправить (и проверить) обратные вызовы можно зарегистрировать как для отдельных кнопок, так и для самой формы (
$form['#submit']
). Те, которые зарегистрированы для формы, вызываются для каждой кнопки отправки, а те, которые зарегистрированы для отдельной кнопки только для этой кнопки. (ПРИМЕЧАНИЕ: Важное различие Drupal 5/6 здесь, см. Редактирование ниже.)
- Обработка форм по умолчанию (отправка и проверка функций, названных по имени формы) работает в Drupal, автоматически добавляя обратные вызовы для этих форм в массивы
'#submit'
и '#validate'
.
- Регистрация использует массивы, чтобы разрешить нескольким функциям отправки / проверки вызываться одна за другой (в том же порядке, в котором они появляются в массиве).
Итак, в вашем случае вы могли бы сделать переключение if / elseif, предложенное ax, или вам нужно было бы сбросить «глобальные» обратные вызовы для формы, явно переместив ее на кнопку отправки по умолчанию:
$form['fieldset']['submit']['#submit'] = $form['#submit'];
unset($form['#submit'];
(то же самое для проверки обратных вызовов)
После этого ваш опубликованный пример для Большой Красной Кнопки, выполняющей злой план, должен работать как положено;)