老葛的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的bug^_^,我也不知道。
这个有可能是Drupal的bug^_^,我也不知道。
这里怎么直接跑总结了。。。
导航的顺序是有点乱啊!
正确顺序
上一页:< 使用hook_form_alter()修改表单 下一页:使用drupal_execute()通过程序来提交表单 >