грн. Валюта

Як отримати id модуля OpenCart в коді

Якщо ви розробник модуля або хочете кастомізувати існуючий модуль, то будете здивовані, що не можете перевірити id модуля у коді. За замовчуванням OpenCart не передає module_id у налаштування мод…

Як отримати id модуля OpenCart в коді

Якщо ви розробник модуля або хочете кастомізувати існуючий модуль, то будете здивовані, що не можете перевірити id модуля у коді. За замовчуванням OpenCart не передає module_id у налаштування модуля і це особливо прикро для мультимодулів, що дозволяють створювати декілька екземплярів модуля з різними налаштуваннями.

Навіщо потрібен module_id

Ідентифікатор модуля - це унікальний номер кожного модуля в системі. Він важливий у багатьох сценаріях використання. Коли ви створюєте кілька екземплярів одного модуля з різними налаштуваннями, module_id дозволяє розрізняти їх між собою. При взаємодії з базою даних module_id дає можливість створювати запити, які працюють тільки з даними конкретного екземпляра модуля. Це важливо для модулів, які зберігають користувацькі налаштування або результати роботи чи для кешування. Або просто для перевірки у коді, якщо вам потрібно додати щось лише для певного конкретного модуля, а не для всіх його суміжних копій.

За замовчуванням OpenCart передає в контроллер модуля тільки налаштування з поля setting бази даних. Коли система викликає модуль, вона розпаковує JSON з налаштуваннями, але втрачає інформацію про сам ідентифікатор модуля. Це означає, що всередині контроллера модуля розробник не має прямого доступу до module_id без додаткових маніпуляцій з кодом.

Рішення через OCMOD

Найпростішим способом вирішення цієї проблеми є створення OCMOD модифікатора, який автоматично додає module_id до налаштувань модуля. Цей підхід практично не порушує стандартну архітектуру OpenCart і забезпечує сумісність з усіма існуючими модулями.



    Fix: Add module_id to setting
    fix-module_id
    1.0.0
    ocdev.pro]]>
    https://ocdev.pro/en/
    
        
            row['setting'], true);
            ]]>
            row['setting'], true);
            $setting['module_id'] = $module_id;
            return $setting;
            ]]>
        
    

Модифікатор змінює метод getModule у файлі catalog/model/setting/module.php. Замість простого повернення розпарсених JSON налаштувань, система тепер додає до цього масиву поле module_id з відповідним значенням.

Такий підхід гарантує, що кожен модуль автоматично отримає доступ до свого унікального ідентифікатора без необхідності додаткових змін у коді контроллерів.

Встановлення та активація модифікатора

Після завантаження перейдіть в розділ Розширення → Модифікації (Extensions → Modifications) і натисніть кнопку Оновити для застосування змін. Система автоматично застосує модифікацію до потрібного файлу.

Модифікатор повністю сумісний з існуючими модулями і не потребує змін у їхньому коді. Всі модулі, які не використовують module_id, продовжують працювати як зазвичай. Модифікатор не має впливу на продуктивність системи, оскільки додає лише одне присвоєння значення до існуючого процесу. При цьому він універсальний і працює з усіма типами модулів без винятків.

Приклад використання module_id в коді модуля

Після встановлення модифікатора ви можете легко використовувати module_id у своїх модулях. У контроллері модуля ідентифікатор стає доступним через масив налаштувань:

class ControllerExtensionModuleYourModule extends Controller {
    public function index($setting) {
        $module_id = isset($setting['module_id']) ? $setting['module_id'] : 0;
        
        // Використання для кешування
        $cache_key = 'your_module.' . $module_id;
        $data = $this->cache->get($cache_key);
        
        // Для роботи з базою даних
        $this->db->query("UPDATE custom_table SET data = 'value' 
                         WHERE module_id = '" . (int)$module_id . "'");
        
        // Для збереження логів
        $this->log->write('Module ' . $module_id . ' executed successfully');
    }
}

Якщо потрібно передати module_id в шаблон модуля, додайте в контролер модуля такий рядок:

$data['module_id'] = isset($setting['module_id']) ? $setting['module_id'] : 0;

Як бачите, отримати id модуля дуже просто і ми показали вам один із методів, найпростіший і найшвидший, як це можна зробити. Це дозволить вам розширити можливості вашої системи і кастомізувати ваші модулі під себе.

Останнє оновлення: 19.04.2026

Зв'язок в Telegram Зв'язок в Telegram