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

Для того чтобы установить модуль необходимо закачать его архив на сайт. Для этого заходим в раздел Установка расширений – нажимаем кнопку загрузить. Выбираем скачанный предварительно на стационарный компьютер файл расширения (модуля) и загружаем его.

После загрузки вы сможете увидеть ваш архив модуля в списке

Далее необходимо перейти в раздел Модули/Расширения – Модули/Расширения, найти ваш модуль в нужном разделе выпадающего меню и продолжить его настройку.

Обратите внимание что разные модули могут быть в разных разделах, к примеру модули оплаты скорее всего после установки находятся в разделе «Оплата», а модули генерации карты сайта в разделе «Каналы продвижения».

Бывают случаи, когда при закачанном архиве модуль не удается обнаружить в списке. В этом случае необходимо зайти в раздел Модули/Расширения — Модификаторы и нажать на кнопку обновить модификаторы.
Подробнее об очистке кеша сказно в отдельной статье. В некоторых ситуациях некомпетентные разработчики делают изменения напрямую в файлах кэша модификаций, поэтому их обновление может сбросить сделанные изменения. В таком случае нужно восстановить резервную копию сайта и заставить разработчика сделать измнения номральным способом, к примеру через модификатор.
Где лежат модули в opencart
Fullstack JavaScript разработчик
- Статьи
- Opencart
- Модули в Opencart: разбираемся в основах
Модули в Opencart: разбираемся в основах
В этой статье разберёмся с основами системы модулей в популярном e-commerce движке Opencart и напишем простой модуль.
Данная статья не рассматривает OCmod/VQmod, здесь мы поговорим об основах и напишем несложный модуль.
Движок Opencart — это довольно успешный opensource проект на ниве e-commerce решений. Думаю, успех его достигнут, не в последнюю очередь, благодаря экстремально простой архитектуре, заложенной в движок ещё в первых версиях.
По сути, мы имеем MVC+L архитектуру — это уже, практически стандартный, в индустрии Model-View-Controller и Language (не знаю почему, но систему перевода выделяют в отдельную букву).
Движок предоставляет два отдельных интерфейса — admin и catalog, соответственно бэкенд/фронтенд сайта (по старым до_javascript_frontend_development понятиям), т.е. это два отдельных приложения в одном, и большую часть всех манипуляций вы, как разработчик, будет проводить именно там.
Каталог system в корневой директории содержит все вспомогательные элементы Opencart, его базовый код, а также набор библиотек (system/library), куда вы можете добавлять необходимые для работы библиотеки.
Обратите внимание
На данный момент, в дикой природе существуют и функционируют три основные версии Opencart — 1.5.6, 2.3, 3.0.2.0.
Между этими версиями существуют некоторые различия, о которых мы поговорим в следующей статье, но сейчас будем рассматривать всё со стороны наиболее популярной версии 2.3.
Реестр Opencart (Registry)
Реестр в Opencart, это основа основ всего в этом движке, он представляет собой реализацию Dependency Injection паттерна и агрегирует в себе всё, что вы используете стандартными способами. Мы детально рассмотрим внутреннюю кухню Opencart в одной из следующих статей, а пока просто примем тот факт, что вокруг registry построено всё в Opencart — от загрузчика до контроллеров.
Проксирование (Proxy)
Прокси устроен достаточно просто — все методы проксируемого объекта копируются в объект прокси. В классе реализованы магические методы __set, __get, __call, определяющие поведение объекта (отличий от стандартного поведения фактически никакого), сама концепция прокси, вероятно, внедрена исключительно для поддержки моделями event handler системы (в Opencart 1.5 этой концепции не было, как и Proxy).
Opencart использует проксирование ТОЛЬКО для моделей.
Танцы с Proxy
Загрузчик Opencart передаёт в Proxy ТОЛЬКО методы!
Это может сыграть с вами злую шутку, если вы хотите использовать предопределённые переменные класса или объекта, через self/$this.
Поскольку проксированный объект использует __get/__set завязанные на Registry, вы не сможете получить доступ к своим изначальным переменным в классе нигде, за исключением конструктора!
Загрузчик классов
Opencart использует собственный загрузчик классов — хоть это и возможно, но не рекомендуется прямое подключение PHP файлов (include/require), что налагает свои требования по именованию классов.
Этот загрузчик устроен довольно просто — он предоставляет несколько методов для реализации разного поведения, при загрузке разных типов классов, например метод controller попытается выполнить метод контроллера по переданному роуту, словно его запрашивает пользователь:
load->controller('extension/module/example/index');
А вот при загрузке модели — она просто будет проксирована и добавлена в Registry:
load->model('extension/module/example'); // теперь проксированная модель доступна к использованию: $this->model_extension_module_example->hello();
view — попытается отрендерить представление, language загружает языковой пакет, library — загружает и инициализирует библиотеку подобно модели, но без префиксов (system/library/*), helper подключит скрипт с вспомогательными функциями (system/helper)
Директории модуля
Директории модуля полностью повторяют директории сайта — Opencart просто поместит ваши файлы внутрь себя. Это означает что вы можете устанавливать ocmod.zip файлы через установщик, или просто копировать файлы модулей в соответствующие директории сайта.
Пример модуля
Давайте напишем простенький модуль под названием «example».
Наш модуль не будет делать ничего особенного, всего лишь выводить текст «Hello from example module» в том месте, куда вы его вставите в настройках шаблонов (дизайн → макеты).
Для этого нам необходимо подготовить следующую иерархию каталогов:
upload/ admin/ controller/extension/module view/template/extension/module language/ru-ru/extension/module catalog controller/extension/module view/theme/default/extension/module
В этом примере мы опустим использование моделей и вернёмся к ним в следующей статье, когда попытаемся сделать что-то поинтереснее.
Bash tip:
В bash, для быстрой генерации этих каталогов вы можете воспользоваться такой командой:
mkdir -p upload/,catalog/>/extension/module
Эта команда сгенерирует набор директорий указанный слева.
В моём блоге вы можете найти bash функцию для удобной генерации структуры директорий для модуля Opencart.
Обратите внимание!
Если вы собираетесь распространять модуль в виде ocmod.zip файла — корневым каталогом в архиве должен быть upload!
Административная часть или бэкенд модуля
Переводы
Переводы Opencart хранятся в каталоге languages, они довольно примитивны и представляют собой PHP файлы содержащие массив $_. В этом массиве прописываются ключи-значения, и, собственно, всё!
В каждой языковой директории имеется файл с названием кода языка (например, languages/ru-ru/ru-ru.php), в котором содержатся общесистемные переводы, а также региональные настройки.
Обратите внимание!
Языковой загрузчик Opencart работает по принципу замещения подгруженных ранее переводов, поэтому вам нет необходимости подключать или перезаписывать системные переводы.
Каждый модуль Opencart должен обладать одноимённым файлом переводов, в котором необходимо наличие секции heading_title, значение этой секции используется для вывода названия модуля в списке модулей:
Обратите внимание!
В случае отсутствия этой секции, вы рискуете получить дублирующиеся имена модулей в списке, а в случае отсутствия языкового файла модуля — ошибку PHP!
Контроллер
Настало время разработки контроллера для админки. Для этого создадим файл example.php в директории admin/controller/extension/module:
Обратите внимание на префикс ControllerExtensionModule в названии нашего класса — Controller даёт загрузчику понять что он имеет дело с контроллером, ExtensionModule — что класс лежит в директории extension/module.
Все ваши контроллеры и модели обязаны придерживаться этого правила наименования, иначе загрузчик попросту не сможет подключить ваши классы!
Теперь давайте создадим свой action с названием index. Этот метод можно считать входной функцией модуля (как функция main в C):
load->language('extension/module/example'); // устанавливаем заголовок окна $this->document->setTitle($this->language->get('heading_title')); // загружаем модель setting $this->load->model('setting/setting'); // если от пользователя пришёл POST запрос if ($this->request->server['REQUEST_METHOD'] == 'POST') < // заполняем настройки модуля из него $this->model_setting_setting->editSetting('example', $this->request->post); // и редиректим пользователя к списку модулей $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)); > // устанавливаем переменные представления $data['heading_title'] = $this->language->get('heading_title'); // эти переводы уже подгружены Opencart из ru-ru.php: $data['text_enabled'] = $this->language->get('text_enabled'); $data['text_disabled'] = $this->language->get('text_disabled'); $data['entry_status'] = $this->language->get('entry_status'); $data['action'] = $this->url->link('extension/module/example', 'token=' . $this->session->data['token'], true); // устанавливаем текущий статус модуля if (isset($this->request->post['example_status'])) < $data['example_status'] = $this->request->post['example_status']; > else < $data['example_status'] = $this->config->get('example_status'); > // добавляем кусочки шаблона в качестве переменных $data['header'] = $this->load->controller('common/header'); $data['column_left'] = $this->load->controller('common/column_left'); $data['footer'] = $this->load->controller('common/footer'); // выводим результат пользователю $this->response->setOutput($this->load->view('extension/module/example.tpl', $data)); > >
Как видите, Opencart помимо готовых переводов, предоставляет также и несколько общих контроллеров, которые используются для добавления интерфейсных частей вроде шапки и подвала.
Эти контроллеры отличаются тем, что не выводят результат рендеринга в Response, а просто возвращают подготовленный view (return $this->load->view. ). Чуть позже мы будем использовать эту концепцию при разработке фронтенд контроллера.
Представление или шаблон
Opencart не использовал внешних шаблонизаторов вплоть до третьей версии (там прикрутили twig), и по сути шаблоны, это такая мешанина html + php.
У такой связки есть только один минус — она позволяет говнокодить и использовать php в шаблоне не по назначению.
Давайте создадим шаблон для нашего модуля — view/template/extension/module/example.tpl:
» method=»post» enctype=»multipart/form-data»>
Отлично!
Административная часть модуля готова, давайте протестируем её. Для этого можно пойти двумя путями.
- Традиционный способ, унаследованный из первых версий движка: просто копируем содержимое папки upload в корень установленного Opencart
- Более удобный для дистрибуции: упаковываем папку upload в ZIP архив с названием .ocmod.zip и устанавливаем модуль штатным установщиком Opencart.
Во время разработки более удобен способ с простым копированием файлов, однако, распространять свой модуль лучше всего в виде *.ocmod.zip файла.
Bash tip:
Для удобного и быстрого копирования всех файлов нашего модуля в движок, можно воспользоваться командой rsync:
rsync -r ./upload /upload/
А для быстрого создания нужного нам архива можно воспользоваться консольной версией zip:
zip -r9 .ocmod.zip ./upload
После того как модуль будет внедрён одним из способов в систему, нужно его установить (находим его в разделе «дополнения/дополнения» и кликаем по зелёной кнопке установки). Кроме того, поскольку наш модуль подразумевает возможность вставки через интерфейс настройки шаблонов, нужно его активировать (переходим в редактирование модуля и выбираем статус «включено»):
На заметку
Управление статусом нужно только тем модулям, которые можно встраивать через макеты. В обратном случае вовсе необязательно вообще реализовывать поддержку статуса.
Как только мы включили модуль, он становится доступен для выбора в настройках макетов. Теперь мы с лёгкостью можем добавить его на сайт:
Однако, сейчас вы не увидите никаких изменений на странице, поскольку мы не написали ни строки управляющего кода для фронтенд части (catalog).
Концептуальной разницы между admin/catalog частями модуля почти нет, стоит только упомянуть, что в панели администрирования нет такого понятия как «тема» — там все представления располагаются сразу в папке template.
Фронтендная часть модуля подразумевает такую структуру файлов представления: view/theme/default/template/extension/module.
Обратите внимание!
Всегда создавайте стандартные шаблоны модуля в теме default. Эта тема всегда присутствует в Opencart, поэтому у вас не возникнет проблем с дистрибуцией шаблонов. Кроме того, далее мы увидим как можно дать пользователям модуля возможность кастомизировать их на уровне темы.
Пользовательская часть (или фронтенд)
Контроллер
Помните, я упоминал контроллеры, которые возвращают отрендеренные шаблоны, а не устанавливают их в объект Response?
Для фронтенда мы воспользуемся именно таким способом вывода содержимого − catalog/controller/extension/module/example.php:
config->get('config_template') . '/template/' . $view)) < $view = $this->config->get('config_template') . '/template/' . $view; > return $this->load->view($view); > >
При выводе модуля, прикреплённого в макете, Opencart вызывает индексный экшн (метод index). В нём мы проверяем — существует-ли кастомное представление в текущей теме сайта ($this->config->get(‘config_template’)), и если существует, то оно и будет загружено, если нет, то будет использовано представление из темы default.
Таким образом мы позволяем пользователям нашего модуля гибко изменять шаблоны модуля согласно своим требованиям.
А вот и наше стандартное представление − catalog/view/theme/default/template/extension/module/example.tpl:
Hello from example module!
Когда вы запакуете и установите обновлённую версию нашего модуля, то получите что−то в таком духе:
Подведём итог
Мы разработали абсолютно бесполезный, но собственный модуль для Opencart 2. Рассмотрели базовые принципы разработки и некоторые подводные камни.
В следующей статье я планирую рассказать о системе OCmod/VQmod, показать что это, зачем и как использовать.
Помните — Opencart это свободное программное обеспечение, поэтому вы можете самостоятельно изучать и модифицировать его в своих целях.
Разработка модулей
Написание модулей OpenCart может быть очень хорошим способом узнать, как основы OpenCart действительно работают. Как и остальные компоненты OpenCart, модули следуют шаблону проектирования MVCL. В этом руководстве по документации будет описано, как Dы используете каждый из компонентов MVC-L для создания админки и витрины части Вашего модуля. Самый простой способ создать модуль — это загрузить DIY Module Builder скелет из HostJars. Этот модуль содержит структуру каталогов, файлы и инструкции о том, как понимать и создавать свои собственные модули. Эта страница является более теоретическим руководством.
Основная структура каталогов
Базовая файловая структура Вашего модуля будет разделена на две части: папку администратора и каталог. Содержимое каждой папки будет соответствовать структуре MVC-L соответственно, с той разницей, что администратор будет заниматься исключительно функциональностью бэкэнда, а каталог — функциональностью веб-интерфейса. Пользователи Вашего модуля будут взаимодействовать и настраивать его параметры в административной части магазина. Следовательно, файлы в папке администратора будут обрабатывать любые изменения в его настройках, способ отображения модуля в администрировании, установку/удаление модуля и т.д. Аналогичным образом, способ отображения модуля и его работа в интерфейсе пользователя. из магазина будут обрабатываться файлы в папке каталога.

На изображении выше показан скелет структуры каталогов, которой должен следовать Ваш модуль. Хороший способ начать работу с Вашим модулем — продублировать структуру папок и создать указанные выше файлы. То, что будет в этих файлах, определяется тем, что Ваш модуль пытается выполнить, но основные функции подробно описаны в разделах ниже.
Функциональность модуля администратора
Когда владелец магазина использует Ваш модуль, он захочет отредактировать параметры конфигурации модуля в администраторе, чтобы решить, на каких макетах будет отображаться модуль, включен ли он или отключен, и какие-либо специфичные для модуля параметры. Как разработчику модуля, вам нужно будет создать страницу администратора, на которой можно редактировать модуль и добавлять или настраивать параметры конфигурации.
Все файлы администратора находятся в папке admin/. Вы найдете четыре папки в папке admin/:
Для всех модулей потребуется по крайней мере один файл в каждой из папок вида и контроллера. Большинству потребуется файл в каждой из папок модели и языка. Обычно файлы имеют одинаковое имя, за исключением того, что файл представления имеет другой суффикс (.tpl или .twig). Мы пройдемся по этим файлам один за другим.

Контроллер
Первый файл, который Вы создадите, будет контроллером страницы интерфейса Вашего модуля. OpenCart автоматически идентифицирует существующие модули, просто прочитав папку admin/controller/module Вашего магазина. Любые модули, существующие в этой папке, будут автоматически показаны на странице Модулей, и на странице Пользовательские разрешения. Вы можете вызвать файл Вашего контроллера my_module.php.
Файл контроллера — это место, где Вы можете загрузить языковые файлы для преобразования текста в переменные, которые будут использоваться в файле шаблона. На диаграмме выше Вы можете увидеть $_[‘text’] переменная обрабатывается контроллером, а затем отправляется в виде $text в представление. Здесь Вы также будете использовать несколько файлов моделей и их функций класса, включая файл модели вашего модуля, если он есть. Для получения дополнительной информации о загрузке файлов см. Загрузка файлов в контроллер.
Вы также можете иметь функцию, определенную как public function install (). Эта функция будет срабатывать при нажатии на ссылку установки на странице Расширения > Модули. Аналогично, функция, определенная как public function uninstall (), будет запущена при нажатии на ссылку удаления. Вы можете использовать эти функции для создания и удаления любых структур (таких как таблицы базы данных или настройки конфигурации), требуемых Вашим модулем. Хорошей практикой является создание функции удаления для очистки любых изменений, внесенных Вашим модулем. Чтобы увидеть конкретный код для install(), uninstall(), посетите Установить/удалить модуль.
Доступ через URL
Контроллер — единственный файл в структуре MVC-L, доступ к которому осуществляется по URL в OpenCart. В администрации URL будет выглядеть так /admin/index.php?route=module/my_module&token. Администратор добавляет токен в URL, тогда как ссылка в каталоге его не будет иметь. В результате файл контроллера будет иметь функцию, определенную как public function index(). Это общедоступный ‘page’ загружается по URL-адресу, который будет показан при Кнопка редактирования и где форма просмотра будет отправлена. Представленные данные будут обработаны в этой функции и сохранены в таблице базы данных `settings` через объект конфигурации контроллера.
Представление
Второй необходимый файл для интерфейса администратора Вашего модуля — это файл вида. Он будет создан в папке admin/view/template/module и будет иметь суффикс .tpl (.twig). Это стандарт для файлов просмотра OpenCart. В этом файле Вы создадите форму для пользователя, чтобы заполнить и отправить. Он будет передан в индексную функцию контроллера модуля. Самый простой способ создать файл представления — это скопировать и вставить существующий аналогичный файл представления и отредактировать форму, чтобы она содержала правильные поля для параметров конфигурации Вашего модуля. Вы можете вызвать в Ваш файл представления my_module.tpl (my_module.twig).
В представлении Вы сможете получить доступ к тексту на языке, который хранится в файле контроллера как переменная PHP. См. Загрузка файлов в Контроллере для получения кода о том, как это сделать.
Модель
Модули редко требуют файл модели на стороне администратора. Однако, если Ваш модуль использует собственную таблицу базы данных или пользовательский запрос для создания данных определенного формата, то Вы можете написать файл модели. Примером этого может быть, если вы пишете модуль счетчика посетителей, где каждый посетитель хранится в таблице базы данных со своим IP-адресом и количеством посещений. Затем Вы можете создать файл модели с функцией для определения и создания этой дополнительной таблицы в базе данных OpenCart. Файл модели будет находиться в папке admin/model/module. Вы можете вызвать файл модели my_module.php, такой же, как Ваш контроллер и языковые файлы.
Функциональность внешнего интерфейса
Внешний интерфейс Вашего модуля следует той же схеме, что и описанный выше интерфейс администратора. То, что Вы будете включать в каждый из Ваших файлов внешнего интерфейса, будет в значительной степени зависеть от того, что должен делать Ваш модуль. Модуль может обращаться к любым файлам моделей, которые уже существуют в OpenCart, Вам не нужно писать собственные запросы к базе данных, если такой же запрос уже существует. Например, catalog/product модель содержит много полезных запросов для получения продуктов. Использование этих функций модели должно быть предпочтительнее, чем изобретать велосипед.
Ключевое отличие во внешнем интерфейсе Вашего модуля заключается в том, что Ваш файл представления будет находиться в папке catalog/view/theme/(themename)/template/module. Это значительно более глубокая структура папок для файла представления администратора из-за тем. Магазин OpenCart может иметь много разных темы интерфейса доступен, но только один админ шаблон. (themename)
Во внешней части Вашего модуля Вы будете иметь доступ к опциям конфигурации, сохраненным Вашим модулем, через объект конфигурации контроллера и переменную $settings, передаваемую в функцию индекса контроллера модуля. На основе этих настроек Вы можете управлять аспектами отображения веб-интерфейса.
OpenCart
- Витрина
- Демо
- Скачать
- Скачать OpenCart RE
- Скачать Русификатор для OpenCart
Файловая структура OpenCart

Любой, кто начинает работать с OpenCart задается вопросом: «Что где лежит? Или какая папка и какие файлы за что отвечают в OpenCart, в какую папку нужно копировать файлы нового OpenCart модуля?» Попробуем ответить на эти вопросы.
Корневая папка
Корневая папка OpenCart, которая находится в папке сайта, содержит 4 папки и 5 файлов:
папки:
admin — содержит файлы панели администрирования магазинов, то, что видит администратор сайта
catalog — содержит файлы каталога магазина, то, что видит пользователь, когда заходит на сайта
image — cодержит изображения для товаров, каталогов, флаги, изображения для товара без изображения, кешированые копии изображений.
system — содержит системные файлы
файлы:
.htaccess.txt — содержит настройки для ЧПУ (чтобы ссылки на сайте были не yoursite.com/index.php?route=product/product&product_id=40, a yoursite.com/iphone), а также некоторые настройки для сервера, например время выполнения скриптов, максимальный размер для загружаемых файлов итд.
config.php — конфигурационный файл, содержит определение глобальных переменных для папок сайта, например DIR_APPLICATION для папки каталога, DIR_SYSTEM для папки системных фалов итд., а также настройки базы данных: драйвер БД, хост, пользователь, пароль, БД, префикс таблиц
crossdomain.xml — файл междоменной политики, нужен например для Adobe флэш плеера.
index.php — главный файл, который запускается первым
php.ini — файл php настроек, здесь можно задать настройки например для стандартной кодировки, лимита оперативной памяти для сайта итд.
Папка admin
Содержит 4 папки и 3 файла,
папки:
controller — папка для OpenCart контроллеров, содержит контроллеры для работы с каталогом (товар, категория, атрибуты, опции, фильтры итд.), основные (common) контроллеры (шапка сайта, футер, меню, страница авторизации, левая колонка итд.), контроллеры расширений (модули, модификации, оплата, доставка..), локализация, установленный модули, настройки, работа с пользователями итд.
language — папка языковых файлов, содержит папки для каждого языка с языковыми файлами для этого языка
model — папка для моделей
view — папка для представлений, шаблонов, содержит как сами шаблоны так и картинки для них, яваскрипт библиотеки и файлы, css файлы
файлы:
практически не отличаются от файлов каталога, описанных выше.
Папка catalog:
Содержит 4 папки, которые по структуре не отличаются от папок папки admin, за исключения разве что папки представалений, которая в каталоге может содержать несколько тем, а в admin только 1:
controller
Папка system
Содержит системные файлы:
cache — папка для кешированых данных
config — папка для конфигурационных файлов
download — папка для загруженных файлов
engine — файлы для основных классов движка: действие action, контроллер controller, события event, фронт контроллер front, загрузчик loader, модель model, реестр registry
helper — файлы функций помощников: json — для преобразования массивов в json объекты, utf8 — для работы с текстом в кодировке utf8, vat — для vat кодов
library — классы-библиотеки: драйвера баз данных db, системы кеширования cache, работа с корзиной cart, конфигурационными файлами config, пользователями user,
валютой currency, изображениями image, почтой mail, пользователями user, кодировка encryption итд.
logs — логи ошибок
modification — файлы модификаций
upload — файлы для выгрузки
modification.xml — файл модификаций OpenCart
startup.php — файл для проверки установок системы и загрузки основных классов и помощников, необходимых для OpenCart. Этот файл грузится одним из первых при загрузке системы.
Файловая структура модулей
Файловая структура модулей полностью копирует файловую структуру OpenCart, при установке модуля нужно скопировать все файлы модуля в аналогичные папки OpenCart. Никакие файлы OpenCart не должны быть переписаны файлами модуля. Если в модуле есть измененный файл OpenCart то он должен быть задокументирован, прежде чем переписать такой файл обязательно сделайте копию оригинального файла.
