2013-10-08 2 views

ответ

1

Спасибо за ваш быстрый ответ. Я нашел одно простое решение.

Ушли в мой контроллер

модуль завернутые $this->render(); с if(!$this->customer->isLogged()) { $this->render(); }

Это работает прекрасно.

+1

Да, это так, но проверьте мое примечание в конце моего ответа - в этом случае все модули заполняются, вся логика в модулях выполняется даже, когда пользователь не вошел в систему. Это означает, что многие запросы БД которые не нужны для незащищенного пользователя ... Мое решение, когда обертывает весь код метода, лучше. – shadyyx

1

Конечно, есть и простое обращение!

Открыть, например, контроллер в левой колонке (catalog/controller/common/column_left.php) и после строки:

protected function index() { 

добавить это условие (только с открывающей скобки):

if($this->customer->isLogged()) { 

Теперь найдите строку

$this->render(); 

и перед тем он добавляет следующее:

} else { 
     $this->data['modules'] = array(); 
    } 

Таким образом, окончательный код должен выглядеть следующим образом:

<?php 
class ControllerCommonColumnLeft extends Controller { 
    protected function index() { 
     if($this->customer->isLogged()) { 
      // ... all the previous code up to the render() call 
     } else { 
      $this->data['modules'] = array(); 
     } 

     $this->render(); 
    } 
} 

Теперь сделайте то же самое в column_right.php, content_bottom.php и content_top.php и Вы должны сделать ;-)

EDIT: Можно также хотеть отредактируйте конкретные контроллеры модулей и добавьте условие там, но это будет не так просто и имеет другие последствия - все еще будут запросы БД, чтобы собрать все доступные модули. В моем решении, кроме его простоты, есть и тот факт, что для не зарегистрировано пользователя нет запросов БД для модулей будет сделано вообще ..

Смежные вопросы