Розробка кастомного модуля 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 днів |
Вартість розраховується індивідуально, виходячи зі складності завдань. Отримайте консультацію — ми відповімо на питання та допоможемо визначитися з архітектурою модуля.







