3

登录后Opencart登录到上一个查看过的页面?

任何人都知道可以做到这一点的方法吗?使用版本 1.5.4

希望有人可以建议/帮助!

谢谢!

4

2 回答 2

2

要实现此场景:

  1. 用户单击登录链接。
  2. 用户填写登录表单并单击提交按钮。
  3. 在他登录后,您希望他重定向到他单击登录链接的页面。

您将不得不编辑catalog/controller/account/login.php 控制器。在该public function index() {行之后添加:

if(!isset($this->session->data['login_redirect'])
        && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) !== false
                || strpos($_SERVER['HTTP_REFERER'], HTTPS_SERVER) !== false)) {
    $this->session->data['login_redirect'] = $_SERVER['HTTP_REFERER'];
}

请注意$_SERVER['HTTP_REFERER']可能不包含任何 URL,具体取决于所使用的 HTTP 服务器和/或浏览器,因此这可能不会一直有效(并且没有其他机会检索用户来自的 URL)。

现在在同一个文件中找到该行:

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

(应该是第 59 行,我的版本是 1.5.5.1)并将其更改为:

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

这在大多数情况下应该有效。

于 2013-06-07T13:36:33.937 回答
2

感谢上面 shadyyx 的回答。我没有足够的代表权来投票,所以我在这里发布我的 vQmod 代码以表示感谢。

请注意,下面的代码替换了所有 3 个实例,$this->redirect($this->url->link('account/account', '', 'SSL'))因为仅替换第一个实例对我不起作用(尚未经过详尽测试)。

<?xml version="1.0" encoding="UTF-8"?>
<modification>
<id>Login Redirects (to where user was prior to login)</id>
<version>1</version>
<vqmver>2.4.1</vqmver>
<author>Salad_Dressing (with help from shadyyx)</author>
<file name="catalog/controller/account/login.php">
    <operation>
        <search position="after"><![CDATA[
            public function index() {
        ]]></search>
        <add><![CDATA[
            if(!isset($this->session->data['login_redirect']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) !== false || strpos($_SERVER['HTTP_REFERER'], HTTPS_SERVER) !== false)) {
                $this->session->data['login_redirect'] = $_SERVER['HTTP_REFERER'];
            }
        ]]></add>
    </operation>

    <operation>
        <search position="replace"><![CDATA[
            $this->redirect($this->url->link('account/account', '', 'SSL'));
        ]]></search>
        <add><![CDATA[
            if(!empty($this->session->data['login_redirect'])) {
                $url = $this->session->data['login_redirect'];
                unset($this->session->data['login_redirect']);
                $this->redirect($url);
            } else {
                $this->redirect($this->url->link('account/account', '', 'SSL'));
            }
        ]]></add>
    </operation>
</file>
</modification>
于 2014-04-09T13:24:32.607 回答