hook_submit, hook_form_alter, hook_validate in Drupal 6.x

EDIT: 2011-02-07 更詳細的 hook_form_alter 例子

hook_submit() 是每一張form 提交的時候會經過的 hook
可以用作發電郵之類的自定義動作

類似的, hook_validate() 是驗證每一張 form 的時候會經過的hook
可以自定義更多驗證的 logic

而從Drupal 5.x 之中, hook_submit() 的 function callback 可以在form API 使用如下 syntax:

<?php
$form
['submit']['#submit'] = array('function1','function2');
?>

那 function1 和 function2 都會在 hook_submit() 之中callback 了

而 Drupal 6.x 之中, #submit 在不再在 submit button 之中定義:

<?php
$form
['#submit'][] = 'my_module_submit_handler'
?>

雖然 D5 的方法都可以, 但便不可以用 hook_form_alter() 從一個 module 修改另一個module 的 form 了

例如, contact form 需要一個contact number,
submit 時將 contact number 加到 body 之內:

<?php
function my_module_form_alter($form,&$form_statues) {
 
$form['#submit'][] = 'my_module_submit_handler';
}
function
my_module_submit_handler($form,&$form_statues){
 
//processing
}
?>

EDIT: 2011-02-07 更詳細的 hook_form_alter 例子

Google