Пишем общий код контроллера в OpenCart

Пишем общий код контроллера в OpenCart

От автора: если вы разрабатывали модули, то могли попасть в ситуацию, когда писали общие элементы, подходящие под все контроллеры OpenCart. Как думаете, было бы круто, если бы вы могли писать общий код где-то в одном файле и вызывать его по необходимости! В этой статье мы обсудим, как написать общий код контроллера и использовать его в разных модулях.

Для уже знакомых с разработкой модулей в OpenCart создание общих элементов – рутина (хедер, футер, сайдбар в index методе класса контроллера). В сети полно способов централизации общего кода, но мы разберем способ OpenCart!

Предполагаю, что вы работаете в последней версии OpenCart и знакомы с процессом разработки модулей. Мы сосредоточимся больше на концепции, а не на обсуждении кода.

Создаем общий код контроллера

Создайте папку catalog/controller/preactiondemo. Создайте файл common.php в этой папке со следующим кодом.

Довольно простой код! Инициализируется пара переменных в массиве $data, кроме последней строки метода setup. Вернемся к ней позже, она раскрывает секрет массива $args.

Понятие процесса отправки

Прежде чем продолжить писать код, я быстро объясню вам процесс отправки в OpenCart.

Когда пользователь переходит по любому URL в OpenCart, создается соответствующий объект action на основе переменной строки запроса route. Кусок кода из index.php.

Далее вызывается метод dispatch.

Вызывается метод dispatch, определенный в файле system/engine/front.php. В этом методе вы найдете цикл while, который выполняется до тех пор, пока $action не станет false.

В цикле вызывается метод execute, определенный в том же файле, пока $action не равен false. Это значит, что если метод контроллера возвращает объект action, OpenCart сразу запустит action. Здесь мы можем вызывать другой action прямо из того action. Давайте узнаем, как это сделать!

Вызов общего контроллера и настройка представления

Создайте файл preaction_demo.php в папке preactiondemo со следующим кодом.

Если $flag установлен в true, мы возвращаем объект класса action. А если процесс отправки получает объект action, он продолжает работу с этим action. То есть в нашем случае будет вызван метод setup контроллера common. Вспомните файл common.php, который мы создали в предыдущем разделе.

Здесь важно заметить, что мы передаем array(‘controller’ => $this, ‘method’=>’index’) как аргумент, который далее передается как первый аргумент метода setup контроллера common. Это поможет нам вернуться в метод index контроллера preaction_demo после инициализации переменных.

Далее в методе setup мы определили несколько общих переменных типа хедера, футера и т.д. В конце мы передаем контроль обратно в главный контроллер оттуда, где был вызван метод setup, с помощью следующего выражения.

Нам нужно передать переменные, созданные в методе setup через $data в оригинальный контроллер, чтобы использовать их там – главная цель статьи. Эта переменная передается как первый аргумент метода выше. Второй аргумент очень важен, так как он превратится в переменную $flag. Это делается, дабы избежать бесконечного цикла.

Теперь давайте настроим файл представления catalog/view/theme/default/template/preactiondemo/preaction_demo.tpl со следующим кодом.

Мы закончили с настройкой, теперь давайте перейдем по URL //youropencartstoreurl/index.php?route=preactiondemo/preaction_demo. Должно появиться сообщение «I’ve been set by the ‘setup’ method from the ‘common’ controller file.»!

Вот так вы можете писать общий код в одном месте и вызывать экшен из других контроллеров. Так вы не будете дублировать код, и так легче менять код, часто встречающийся в модулях.

Заключение

Сегодня мы изучили крутой трюк в OpenCart. Мы узнали как вызывать экшен из экшена! Конечно, есть разные способы, но этот давно был у меня в голове, и я решил поделиться им с вами!

Автор: Sajal Soni

Источник: //code.tutsplus.com/

Редакция: Команда webformyself.

Метки:

Похожие статьи:

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