2014-03-19 125 views
1

我是opencart的新手。現在我已經做了一些類別限制,意味着用戶必須登錄才能看到該類別。所以當用戶點擊該類別時,如果他沒有登錄,那麼他將重定向到登錄頁面。上面的過程工作正常 現在一旦我登錄我想重定向到相同的類別頁面。 當我來到登錄頁面,我可以看到的價值「$ _ SERVER [‘HTTP_REFERER’]」,是因爲我想opencart登錄後重定向頁面

site.com/index.php?route=product/category&path=62 
現在

,因爲我讀的在線教程,然後告訴我要改變這樣的代碼文件「項目\目錄\控制器\帳戶\ login.php中」 我有更換下面的代碼

$this->redirect($this->url->link('account/account', '', 'SSL')); 

if (isset($_SERVER['HTTP_REFERER'])) { 
        $this->redirect($_SERVER['HTTP_REFERER']); 
       } else { 
        $this->redirect(HTTPS_SERVER . 'index.php?route=account/account'); 
       } 

當我來到登錄頁面我r讀在HTTP_REFERER ight鏈接,但是當我點擊登錄然後它成爲引用登錄鏈接。那麼我該如何設置呢?

你能告訴我我該怎麼做? 我對此感到困惑。

回答

1

問題是,在登錄請求(應該是POST)之後,表單被提交給相同的URL,因此之前的引用鏈接被登錄頁面替換。它是這樣的:重定向時

  • 引薦登錄:site.com/index.php?route=product/category&path=62後登錄請求
  • 引用:site.com/index.php?route=account/login

您當前的URL因此存儲到類別控制器內的會話您將會重定向到前登錄:

$this->session->data['redirect_after_login'] = "<CURRENT URL GOES HERE>"; 
$this->redirect($this->url->link('account/login')); 

現在登錄控制器成功登錄後,檢查會話變量文件存在,如果是重定向到它:

if(!empty($this->session->data['redirect_after_login'])) { 
    $url = $this->session->data['redirect_after_login']; 
    unset($this->session->data['redirect_after_login']); 
    $this->redirect($this->session->data['redirect_after_login']); 
} 
1
  1. 之前重定向用戶到登錄頁面,您可以一個$this->session->data['redirect']變量設置爲用戶成功登錄後重定向網址。

下面的代碼,例如,將訪客重定向到成功登錄後地址的列表:

$this->session->data['redirect'] = $this->url->link('account/address', '', 'SSL'); 
$this->redirect($this->url->link('account/login', '', 'SSL')); 
  • 或者可以修改目錄/控制器/ account/login.php像這樣。
  • A.變更

    if ($this->customer->isLogged()) { 
        $this->redirect($this->url->link('account/account', '', 'SSL')); 
    } 
    

    if ($this->customer->isLogged()) { 
        $this->redirect($this->url->link('account/account', '', 'SSL')); 
    }elseif(!isset($this->session->data['redirect']) && isset($_SERVER['HTTP_REFERER'])){ 
        $this->session->data['redirect'] = $_SERVER['HTTP_REFERER']; 
    } 
    

    B.並改變

    $ this-> redirect($ this-> url-> link('account/account','','SSL'));

    if(isset($this->session->data['redirect']) && !empty($this->session->data['redirect'])){ 
        $redirect = $this->session->data['redirect']; 
        unset($this->session->data['redirect']); 
        $this->redirect($redirect); 
    }else{ 
        $this->redirect($this->url->link('account/account', '', 'SSL')); 
    }