2011-12-23 61 views
0

我使用的是drupal 7,我想定制注册表单和用户登录表单。 我使用这个代码在template.tpl.php:如何在drupal 7中注册注册表单?

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”不是。 有人请让我知道为什么,并告诉我如何解决它。 感谢您的帮助。

回答

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的缓存任何您添加或更改挂钩的时间或更改将不会反映在您的网站中。

+0

感谢您的回复。 关于MyTHEME_theme_name(&$ vars),其实我不知道。你能发给我一个关于它的链接吗? 关于hook_theme_registry_alter,我完全是你告诉我的。但它仍然不起作用。 – NamPham 2011-12-24 02:16:11