Завантаження файлів у контролері
В архітектурі MVC-L, на якій побудовано ocStore, контролер модуля — це сполучна ланка між мовним файлом, моделлю та шаблоном. Контролер отримує тексти з мовного файлу й робить їх доступними як PHP-змінні в шаблоні (view). Окрім методів, успадкованих від батьківського класу Controller, у контролері можна завантажувати будь-які стандартні моделі та викликати їхні методи. Нижче наведено PHP-код, потрібний для завантаження мовних файлів і моделей та виклику їхніх методів.
Завантаження мовного файлу#
Контролер бере тексти, збережені в мовному файлі, і перетворює їх на змінні, які можна виводити в шаблоні. Це особливо зручно для перекладу модуля: замість того щоб щоразу правити .tpl-файл, змінюючи кожен фрагмент тексту, достатньо відредагувати мовний файл — змінні в контролері та шаблоні залишаться тими самими.
Наведений нижче рядок завантажує мовний файл у контролері модуля. У дужках вказується шлях до мовного файлу відносно теки мови (без розширення .php):
$this->language->load('module/my_module');
Контролер адмінки завантажує лише мовні файли адмінки (admin/language/...), а контролер вітрини — лише мовні файли вітрини (catalog/language/...).
Після завантаження мовного файлу його тексти можна зберегти в масиві $this->data. Метод $this->language->get('text') повертає значення змінної $_['text'] із щойно завантаженого мовного файлу:
$this->data['text'] = $this->language->get('text');
Кожен елемент масиву $this->data стає окремою змінною в шаблоні: $this->data['text'] перетворюється на $text. Цю змінну можна вивести в .tpl-файлі в потрібному місці:
<?php echo $text; ?>
Заголовок сторінки#
Наступний код встановлює заголовок сторінки з тексту мовного файлу:
$this->document->setTitle($this->language->get('heading_title'));
Він бере текст змінної $_['heading_title'] з мовного файлу модуля.
Якщо текст потрібно зберегти як змінну PHP-сесії, використовуйте $this->session->data['text'] замість $this->data['text'].
Завантаження моделей#
Завантаживши модель у контролер, модуль отримує доступ до вбудованих методів ocStore. Методи моделей працюють з базою даних магазину — додають і отримують потрібну модулю інформацію. Радимо користуватися цими методами, а не писати власні запити до БД. Перегляньте теки model в admin/ та catalog/, щоб знайти файли, корисні для вашого модуля. Наприклад, якщо модулю потрібні дані про товари, варто завантажити admin/model/catalog/product.php — він уже містить багато методів для роботи з товарами в базі даних.
Модуль може завантажити будь-яку модель, розташовану в тій самій частині (admin чи catalog), що й контролер:
$this->load->model('setting/setting');
У дужках вказується шлях до моделі відносно теки model. Наведений код завантажує клас ModelSettingSetting, після чого його методи доступні в контролері. Метод завантаженої моделі викликається так:
$this->model_setting_setting->editSetting('my_module', $this->request->post);
Підкреслення відповідають шляху до файлу model/setting/setting.php. Якщо у вашого модуля є власна модель у теці model, вона завантажується так само:
$this->load->model('module/my_module');
Цей код завантажить файл admin/model/module/my_module.php, а його методи будуть доступні через $this->model_module_my_module.
Не використовуйте пробіли в назвах файлів модуля — замість них застосовуйте підкреслення.
Завантаження шаблону#
У контролері потрібно вказати шаблон модуля з теки view. Для цього задайте $this->template, а потім передайте результат на виведення:
$this->template = 'module/my_module.tpl';
$this->response->setOutput($this->render());
Бібліотеки#
У ocStore є набір бібліотек, доступних як контролерам адмінки, так і контролерам вітрини. Вони розташовані в теці system/library у корені магазину. У прикладах із розділу «Завантаження мовного файлу» вище $this->language та $this->document якраз дають доступ до методів бібліотек language.php та document.php. Щоб викликати метод бібліотеки в класі контролера, використовуйте конструкцію $this->[назва бібліотеки]->method().
Додаткова інформація#
Докладніше про роль контролера в MVC та про розробку модулів читайте в розділах Вступ до MVC-L та Розробка модулів.