2

我创建了一个 Drupal 7 自定义登录页面并使用 user-login.tpl.php 模板文件更改了布局。一切都很顺利,直到我意识到大多数强制登录都重定向到 /user 而不是 /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 更改为我的主题名称,它似乎仍然不起作用。我还删除了添加的身体类,但没有去。我认为这是添加的正文类的错误。

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 新手,所以简单的代码/解释是最好的。

4

1 回答 1

0

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

这部分arg(0) == 'user' && (arg(1) == '' || arg(1) == 'login')是对 URL yourwebsite.com/user/login 的检查

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

于 2012-12-24T15:37:01.233 回答