Розробка кастомного модуля OpenCart
Нещодавно до нас звернувся власник магазину на OpenCart: стандартний кошик не підтримував гнучку систему знижок за групами клієнтів. Потрібен був модуль, який автоматично застосовував би знижку 10% для оптовиків та 5% для постійних покупців. Вбудовані механізми OpenCart не дозволяли реалізувати таку логіку без доопрацювань. Ми написали кастомний модуль, який враховує групи, перевіряє історію замовлень та динамічно розраховує знижку. У результаті власник отримав зростання середнього чека на 15% за рахунок персоналізації.
Це лише один із багатьох сценаріїв, коли готові розширення безсилі. Кастомний модуль — це унікальний код, який точно відображає бізнес-логіку вашого магазину. Ми створюємо модулі будь-якої складності: від простих вітринних блоків до інтеграцій з 1С, ERP та кастомними платіжними шлюзами. За 10+ років ми розробили понад 30 модулів для OpenCart 2.x, 3.x та 4.x, що дозволило накопичити велику базу готових рішень та уникнути типових помилок.
Які типи розширень існують в OpenCart?
OpenCart 4.x структурує розширення за типами:
| Тип | Призначення | Приклади використання |
|---|---|---|
module |
Блоки на вітрині | Банери, хіти продажів, вибірки товарів |
payment |
Платіжні шлюзи | Прийом карток, PayPal, Apple Pay |
shipping |
Методи доставки | Розрахунок вартості через API НП, Укрпошти |
total |
Позиції в підсумковій сумі | Знижки, збори, податки, подарункові сертифікати |
report |
Звіти в панелі адміністратора | Статистика продажів, поведінкові звіти |
event |
Обробники подій (хуки) | Модифікація сторінок без правки ядра |
theme |
Теми оформлення | Повна зміна дизайну |
language |
Мовні пакети | Переклади інтерфейсу |
Більшість кастомних завдань вирішується через module (вітрина) або event (інтеграції, модифікатори бізнес-логіки).
Порівняння модулів і подій: що обрати?
| Параметр | Модуль | Подія |
|---|---|---|
| Призначення | Додавання нового функціоналу | Модифікація існуючого |
| Складність | Середня (повноцінний MVC) | Низька (тільки обробник) |
| Гнучкість | Висока (свої контролери, моделі) | Обмежена (тільки перехоплення) |
| Приклад | Блок «Товари з тієї ж категорії» | Додавання поля у форму замовлення |
Якщо потрібно щось принципово нове — обирайте модуль. Якщо потрібно трохи скоригувати стандартну поведінку — подію. Кастомний модуль у 3 рази ефективніший за готове розширення для нестандартної логіки, оскільки не містить зайвого коду.
Як розробити кастомний модуль OpenCart?
Розглянемо створення модуля, який показує товари з тієї ж категорії. Це типовий кейс для покращення cross-sell на сторінці товару.
1. Admin Controller — управління налаштуваннями модуля:
<?php namespace Opencart\Admin\Controller\Extension\Myvendor\Module; class RelatedCategory extends \Opencart\System\Engine\Controller { public function index(): void { $this->load->language('extension/myvendor/module/related_category'); $this->document->setTitle($this->language->get('heading_title')); $data['limit'] = $this->config->get('module_related_category_limit') ?: 6; $data['status'] = $this->config->get('module_related_category_status'); $data['action'] = $this->url->link( 'extension/myvendor/module/related_category.save', 'user_token=' . $this->session->data['user_token'] ); $this->response->setOutput($this->load->view( 'extension/myvendor/module/related_category', $data )); } public function save(): void { $this->load->language('extension/myvendor/module/related_category'); if ($this->request->server['REQUEST_METHOD'] == 'POST') { $this->load->model('setting/setting'); $this->model_setting_setting->editSetting('module_related_category', [ 'module_related_category_status' => $this->request->post['status'], 'module_related_category_limit' => (int) $this->request->post['limit'], ]); $this->response->redirect($this->url->link( 'marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=module' )); } } } 2. Catalog Model — отримання товарів з тієї ж категорії:
<?php namespace Opencart\Catalog\Model\Extension\Myvendor\Module; class RelatedCategory extends \Opencart\System\Engine\Model { public function getProductsFromSameCategory(int $productId, int $limit): array { $query = $this->db->query(" SELECT DISTINCT p.product_id, pd.name, p.image, p.price, p.tax_class_id FROM oc_product p JOIN oc_product_description pd ON p.product_id = pd.product_id AND pd.language_id = '" . (int) $this->config->get('config_language_id') . "' JOIN oc_product_to_category ptc ON p.product_id = ptc.product_id WHERE ptc.category_id IN ( SELECT category_id FROM oc_product_to_category WHERE product_id = '" . $productId . "' ) AND p.product_id != '" . $productId . "' AND p.status = 1 AND p.date_available <= NOW() ORDER BY RAND() LIMIT " . $limit . " "); return $query->rows; } } 3. Система подій (Events) — альтернативний спосіб вбудовування логіки без зміни стандартних файлів. Наприклад, щоб додати блок на сторінку товару, зареєструємо подію:
$this->load->model('setting/event'); $this->model_setting_event->addEvent([ 'code' => 'myvendor_related_category', 'description' => 'Add category products to product page', 'trigger' => 'catalog/controller/product/product/after', 'action' => 'extension/myvendor/event/product.after', 'status' => true, 'sort_order' => 0, ]); У обробнику after можна інжектувати HTML-код блоку прямо у вивід сторінки. Зверніть увагу: в OpenCart 4 використовується неймспейсинг та PSR-4 автозавантаження. Код модуля має слідувати правилам OpenCart developer documentation. Також існує стандартна система OCMOD для розгортання модулів: файли пакуються в ZIP з ocmod.xml, що спрощує встановлення.
Чому варто замовити розробку модуля у нас?
Ми розробили понад 30 кастомних модулів для OpenCart від версії 2.x до 4.x — від простих блоків до інтеграцій з 1С та ERP. Надаємо гарантію на код, документацію та підтримку після встановлення. Ви отримуєте модуль, який не конфліктує з іншими розширеннями та відповідає стандартам кодування OpenCart. Зв'яжіться з нами для оцінки вашого проекту — ми запропонуємо оптимальне рішення та назвемо терміни.
Що входить у розробку модуля?
| Етап | Опис |
|---|---|
| Аналіз вимог | Уточнення бізнес-логіки, інтеграцій, обмежень |
| Проектування | Архітектура модуля, вибір типу (module/event), прототип |
| Розробка | Написання коду контролерів, моделей, шаблонів, подій |
| Тестування | Перевірка на різних версіях OpenCart, Edge-кейси |
| Встановлення та налаштування | Деплой на сервер, налаштування параметрів в адмінці |
| Документація | Інструкція з встановлення, налаштування та експлуатації |
| Навчання | Консультація адміністратора магазину |
Терміни розробки
| Тип модуля | Терміни |
|---|---|
| Простий вітринний блок (без налаштувань) | 1-2 дні |
| Модуль з налаштуваннями в адмінці + вивід | 2-3 дні |
| Платіжний шлюз (новий провайдер) | 3-5 днів |
| Метод доставки з розрахунком через API | 2-4 дні |
| Інтеграція із зовнішньою системою (1С, ERP) | 3-5 днів |
| Кастомна логіка ціноутворення | 3-5 днів |
Вартість розраховується індивідуально, виходячи зі складності завдань. Отримайте консультацію — ми відповімо на питання та допоможемо визначитися з архітектурою модуля.







