Php opencart在登录前停止查看索引页

Php opencart在登录前停止查看索引页,php,mysql,opencart,Php,Mysql,Opencart,我在一个项目中使用opencart 每件事都很好,但我无法找到一个选项,停止查看主页,直到登录 实际上这是项目的要求,只有登录后才能看到家 有没有办法用敞篷车做到这一点 谢谢据我所知,没有内置的功能,但你可以自己做。根据您对@carpenocutomdc问题的回答,您可能需要做一些挖掘,但这应该让您开始: system/library/customer.php public function isLogged() { ... } if (!$this->customer->isLo

我在一个项目中使用opencart

每件事都很好,但我无法找到一个选项,停止查看主页,直到登录

实际上这是项目的要求,只有登录后才能看到家

有没有办法用敞篷车做到这一点


谢谢

据我所知,没有内置的功能,但你可以自己做。根据您对@carpenocutomdc问题的回答,您可能需要做一些挖掘,但这应该让您开始:

system/library/customer.php

public function isLogged() { ... }
if (!$this->customer->isLogged()) {
    // login page
    exit;
}
catalog/controller/common/home.php

public function isLogged() { ... }
if (!$this->customer->isLogged()) {
    // login page
    exit;
}

这是未经测试的,但应该为您指出正确的方向:

(OpenCart 1.4.9.x)

将此保存到: catalog/controller/common/check_login.php

<?php
class ControllerCommonCheckLogin extends Controller {
    public function index() {
        if (!$this->customer->isLogged()) {
            // Require to be logged in
            $ignore = array(
                'account', 'payment'
            );

            $match = false;
            if (isset($this->request->get['route'])) {
                foreach ($ignore as $i) {
                    if (strpos($this->request->get['route'], $i) !== false) {
                        $match = true;
                        break;
                    }
                }
            }

            // Show site if logged in as admin
            $this->load->library('user');
            $this->registry->set('user', new User($this->registry));

            if (!$this->user->isLogged() && !$match) {
                return $this->forward('account/login');
            }
        }
    }
}
?>
在以下内容之后添加:

// Login Check
$controller->addPreAction(new Action('common/check_login'));
基本上使用与维护检查相同的逻辑。。。最大的区别是它在字符串中查找单词“account”。。。如果找到它,它允许显示页面,如果没有,它将重定向到登录页面

如果他们需要注册,请使用“帐户”而不是“登录”一词。。。所有的帐户页面都已经检查了日志,所以不用担心

同样,未经测试,因此您可能需要调整一两件事情-但它应该/可能通过删除代码来工作


检查opencart 1.5.3的_login.php

<?php
class ControllerCommonCheckLogin extends Controller {
    public function index() {
        // Require to be logged in
        if (!$this->customer->isLogged()) {

            // Require to be logged in
            $ignore = array(
                'account','payment'
            );

            $match = false;
            if (isset($this->request->get['route'])) {
                foreach ($ignore as $i) {
                    if (strpos($this->request->get['route'], $i) !== false) {
                        $match = true;
                        break;
                    }
                }
            }

            // Show site if logged in as admin
            $this->load->library('user');

            $this->user = new User($this->registry);

            if (!$this->user->isLogged() && !$match) {
                $this->redirect($this->url->link('account/login'));
            }
        }
    }
}
?>

正确的方法是打开

/catalog/controller/common/home.php

在代码顶部找到
public function index(){
,然后将

if(!$this->customer->isLogged()) {
    $this->session->data['redirect'] = $this->url->link('common/home');
    $this->url->redirect('account/login', '', 'SSL');
}
如果您不确定如何正确执行此操作,只需查看中
public function index(){
之后的前几行即可

/catalog/controller/account/account.php


将主控制器中的代码设置为
common/home
而不是
account/account

他们是否可以看到任何页面,或者必须从一开始就强制登录?您想使用基本登录/注册页面还是特殊登录页面?opencart的哪个版本?您为什么要修改isLogged功能?很好。。。此外,该解决方案的问题是,如果他们使用SEO url,他们仍然可以查看除主页以外的任何其他内容……我不是建议修改isLogged()函数,我只是指出isLogged()的位置函数以防他想去查看。是的,我知道这不是一个完整的解决方案,因为问题不完整,也没有对您的评论作出回应,我只是想告诉您如何“开始”。我有opencart_v1.5.1.3.1,但找不到$controller->addPreAction(新操作('common/maintenance/check'));对于opencart 1.5.1.3.x,它是/index.php的原始/未编辑版本中的第221行刚刚编辑了我的回答:它还需要在忽略数组中付款-否则它将拒绝付款回调是的,我添加$controller->addPreAction(新操作('common/check_login'));在index.php中的第221行之后,但仍然不起作用您是否将check_login.php文件添加到/catalog/common/check_login.php您是否以管理员身份登录?(它检查用户登录,然后检查管理员登录…)