opencart, чтобы остановить просмотр индексной страницы до входа в систему

#php #mysql #opencart

#php #mysql #opencart

Вопрос:

я использую opencart в одном проекте,

все работает нормально, но я не могу найти возможность остановить просмотр домашней страницы до входа в систему.

на самом деле это требование проекта, никто не может видеть home до ВХОДА в систему.

есть ли способ сделать это с ОТКРЫТОЙ КОРЗИНОЙ?

Спасибо

Комментарии:

1. Могут ли они видеть какую-либо страницу или их нужно заставить войти в систему с самого начала? Вы хотите использовать базовую страницу входа / регистрации или специальную страницу входа? Какая версия opencart?

Ответ №1:

это непроверено, но должно указать вам правильное направление:

(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() amp;amp; !$match) {
                return $this->forward('account/login');
            }
        }
    }
}
?>
  

Редактировать /index.php

Найти:

 // Maintenance Mode
$controller->addPreAction(new Action('common/maintenance/check'));
  

Добавить после:

 // Login Check
$controller->addPreAction(new Action('common/check_login'));
  

По сути, используйте ту же логику, что и проверка обслуживания… Большая разница в том, что он ищет слово «учетная запись» в строке… Если он находит его, он разрешает отображение страницы, если нет, он перенаправляет на страницу входа…

Используйте слово «учетная запись» вместо «логин», если им нужно зарегистрироваться… Все страницы учетной записи уже проверяют наличие входа в систему, поэтому беспокоиться не о чем…

Опять же, непроверенный, поэтому вам может потребоваться настроить одну или две вещи, но это должно / может сработать, добавив код


check_login.php для opencart 1.5.3

 <?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() amp;amp; !$match) {
                $this->redirect($this->url->link('account/login'));
            }
        }
    }
}
?>
  

Комментарии:

1. у меня есть opencart_v1.5.1.3.1 и я не могу найти $controller-> addPreAction(новое действие (‘common / maintenance / check’));

2. Для opencart 1.5.1.3.x это строка 221 в необработанной / неотредактированной версии /index.php

3. Просто отредактировал мой ответ: также потребуется оплата в массиве игнорирования — в противном случае он отклонит обратные вызовы платежей

4. да, я добавляю $controller-> addPreAction(новое действие (‘common / check_login’)); после строки 221 в index.php но все равно не работает

5. вы добавили check_login.php файл в /catalog/common/check_login.php Вы вошли в систему как администратор ? (Он проверяет логин пользователя, а затем логин администратора …)

Ответ №2:

Я не знаю ничего встроенного, но вы можете сделать это самостоятельно. Основываясь на ваших ответах на вопросы @CarpeNoctumDC, вам, возможно, придется немного покопаться, но это должно помочь вам начать:

system/library/customer.php

 public function isLogged() { ... }
  

catalog/controller/common/home.php

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

Комментарии:

1. почему вы модифицируете функцию isLogged? Все в порядке… Кроме того, проблема с этим решением заключается в том, что если они используют SEO-URL, они все равно могут просматривать любые другие, кроме домашней страницы…

2. Я не предлагал изменять функцию isLogged(), я просто указывал, где находится функция isLogged(), на случай, если он захочет посмотреть. И да, я знаю, что это не полное решение, потому что вопрос был неполным, и на ваш комментарий не было ответа, я просто дал некоторое представление о том, как «начать».

Ответ №3:

Правильный способ сделать это — открыть

/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() { in

/catalog/controller/account/account.php

установка вашего кода в домашнем контроллере common/home вместо account/account