2014-03-19 128 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')); 
    }