@37度男人 的方法就很容易实现
再分享下其他解决方法:
通过hook_form_alter修改属性,例如在主题template.php文件中,添加
function yourthemename_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'user_login_block'){
$form['name']['#attributes']['class'][] = 'my-class';
}
}
这样就可以为用户名input控件添加了「my-class」的类
要去除drupal自带的几个样式类名需要通过覆写系统默认主题,如 theme_textfield,在里面去掉样式名,但会影响其他控件,要单独指定登录block的话挺麻烦
另一种可行的方法,是通过覆盖 theme_user_login_block 函数
在template实现 hook_theme,如
/**
* hook_theme()
*/
function themename_theme(){
return array(
'user_login_block' = array(
'render element'=> 'form',
'template' => 'user-login-block', // 加入这行则使用 user-login-block.tpl.php 模板文件输出
'path' => path_to_theme().'/templates',
)
);
}
/**
* theme_user_login_block()
*/
function themename_user_login_block($vars){
$form = $vars['form'];
//... 修改$form变量
return drupal_render_children($form);
}
或使用 user_login_block.tpl.php 来输出表单,模板文件非常灵活,可以写出自己想要的dom格式,但是要对Drupal比较熟悉