如何在drupal 7中主题注册表格?

时间:2011-12-23 10:49:44

标签: drupal-7

我正在使用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'没有。 有人请让我知道为什么,告诉我如何解决它。 谢谢你的帮助。

1 个答案:

答案 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的缓存,否则更改将不会反映在您的站点中。

相关问题