Drupal 7使用登录链接登录前重定向用户?

时间:2012-12-24 06:33:07

标签: templates drupal-7

我创建了一个Drupal 7自定义登录页面,并使用user-login.tpl.php模板文件更改了布局。一切都是黄金的,直到我意识到大多数强制登录都被重定向到匿名用户/ user not / user / login。我不想修改user.tpl.php模板,因为这显然会改变我的个人资料页面的布局。

我搜索了一下,发现了一些template.php文件的代码,以检查用户是否已登录,如果没有重定向到user-login.tpl.php文件。

<?php
function mytheme_preprocess_page(&$vars) {
  // Check to see that the user is not logged in and that we're on the correct page.
  if ($vars['user']->uid == 0 && arg(0) == 'user' && (arg(1) == '' || arg(1) ==    'login')) {
// Add a custom template-file.
array_unshift($vars['template_files'], 'page-login');
// Add body classes for easier css.
$vars['body_classes'] .= ' logged';
 }
}
?>

显然删除了php标签并将Mytheme更改为我的主题名称,它似乎仍然无效。我也删除了体类添加但没有去。我将此作为添加了body类的错误。

Warning: array_unshift() expects parameter 1 to be array, null given in framework_preprocess_page() (line 123 of /Applications/MAMP/htdocs/mysite/sites/all/themes/framework/template.php).
Notice: Undefined index: body_classes in framework_preprocess_page() (line 125 of /Applications/MAMP/htdocs/mysite/sites/all/themes/framework/template.php).

如果删除

Warning: array_unshift() expects parameter 1 to be array, null given in framework_preprocess_page() (line 123 of /Applications/MAMP/htdocs/mysite/sites/all/themes/framework/template.php).

我也尝试过基本的重定向

<?php
function YOURTHEME_preprocess_page(&$vars) {
  // Check to see that the user is not logged in and that we're on the correct page.
 if ($vars['user']->uid == 0 && arg(0) == 'user' && (arg(1) == '' || arg(1) == 'login'))     {
drupal_goto("user/login");
  }
}
?>

但该功能会挂起页面

页面未正确重定向

Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

有时可能会因禁用或拒绝接受Cookie而导致此问题。

关闭另一个页面的“用户/登录”路径,而不是/ login路径。

有什么想法吗?我是一个php newb,所以简单的代码/解释是最好的。

1 个答案:

答案 0 :(得分:0)

你有一个无限的重定向循环。当前请求的页面为:yourwebsite.com/ user / login 时,您将用户重定向到页面:yourwebsite.com/ 用户/登录 这是由你的if语句引起的。

此部分arg(0) == 'user' && (arg(1) == '' || arg(1) == 'login')用于检查网址yourwebsite.com/user/login

我想你要解释为什么语句总是返回true。对于arg()函数的逻辑,它的工作原理如下:yourwebsite.com/arg(0)/arg(1)/arg(2)等等。