我正在使用drupal 7,我想自定义注册表单和用户登录表单。 我在template.tpl.php中使用此代码:
function mytheme_theme($existing, $type, $theme, $path){
$hooks['user_login']=array(
'render element'=>'form',
'template' =>'templates/user-login',
);
$hooks['user_register']=array(
'render element'=>'form',
'template' =>'templates/user-register',
);
$hooks['user_pass']=array(
'render element'=>'form',
'template' =>'templates/user-pass',
);
return $hooks;
}
奇怪的是'user_login'和'user_pass'是可行的但是'user_register'没有。 有人请让我知道为什么,告诉我如何解决它。 谢谢你的帮助。
答案 0 :(得分:3)
这是在Drupal中覆盖主题的错误方法,你在那里做的是替换主题注册表中Drupal核心提供的原始项目。这样做会产生不可预测的结果,这可以解释为什么其中一些工作而一个工作没有。
覆盖主题的最佳方法是使用Drupal提供的函数命名约定MYTHEME_theme_name(&$vars)
。所以在你的情况下,这三个函数看起来像这样
function MYTHEME_user_login(&$vars) {
}
function MYTHEME_user_register(&$vars) {
}
function MYTHEME_user_pass(&$vars) {
}
如果您确实想要更改现有主题的模板文件,则应使用hook_theme_registry_alter()
:
function MYTHEME_theme_registry_alter(&$theme_registry) {
$theme_registry['user_login'] = array(
'render element'=>'form',
'template' =>'templates/user-login'
);
}
确保在添加或更改挂钩时清除Drupal的缓存,否则更改将不会反映在您的站点中。