2012-12-24 194 views
2

我創建了一個Drupal 7自定義登錄頁面,並使用user-login.tpl.php模板文件更改了佈局。一切都是金色的,直到我意識到大部分強制登錄都被匿名用戶重定向到/ user not/user/login。我不想修改user.tpl.php模板,因爲這顯然會改變我的個人檔案頁面的佈局。Drupal 7使用登錄鏈接登錄前重定向用戶?

我搜索了一下,找到了一些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引起。

切換出另一個頁面的「用戶/登錄」路徑,而不是/登錄路徑。

任何想法?我是一個PHP新手如此簡單的代碼/解釋是最好的。

+0

可以肯定的是,在您提交登錄表單之前或之後頁面是否被掛起? – pjongjang

回答

0

你有一個無限的重定向循環。您將用戶重定向到以下頁面:yourwebsite.com/ 用戶/登錄當前請求的頁面爲:yourwebsite.com/ 用戶/登錄 這是由您的if語句引起的。

此部分arg(0) == 'user' && (arg(1) == '' || arg(1) == 'login')是檢查URL yourwebsite.com/ 用戶/登錄

我在想,你想解釋爲什麼這個語句總是返回true。對於arg()函數的邏輯,其工作原理如下:yourwebsite.com/ arg(0)/ arg(1)/ arg(2)等等。

+0

得到了一些幫助。謝謝你們 ' <?PHP 功能YOURTHEME_preprocess_page($瓦爾){// 檢查一下用戶是不是在和我們是正確的頁面上登錄。如果($ vars ['user'] - > uid == 0 && arg(0)=='user'&& arg(1)==''){ drupal_goto(「user/login」); } } ?>' – IanGun

+0

再次感謝人們! – IanGun