修改一个特定的表单

老葛的Drupal培训班 Think in Drupal

前面的方式不错,但是如果有很多模块来修改表单,而每个表单都传递给所有的hook_form_alter()实现,你的心里就开始犯嘀咕了。“这太浪费了吧,”你可能会想。“为什么不仅仅根据表单ID构造一个函数并调用它呢?”你想得不错。Drupal完全可以实现你的想法。下面的函数也将修改用户登录表单:
function formexample_form_user_login_alter(&$form, &$form_state) {
    $form['warning'] = array(
        '#value' => t('We log all login attempts!'),
        '#weight' => -5
    );
 
    // Change 'Log in' to 'Sign in'.
    $form['submit']['#value'] = t('Sign in');
}
 
    函数的名字是这样构造的:
modulename + 'form' + form ID + 'alter'
    例如
'formexample' + 'form' + 'user_login' + 'alter'
    将生成
formexample_form_user_login_alter
 
    在这个特定的情况下,第一种方式是比较好的,因为这里涉及到两个表单ID(位于http://example.com/?q=user的表单user_login,和显示在用户区块中的表单user_login_block)。
 

Drupal版本: