Розробка нових каналів просування
До ядра ocStore входить кілька корисних каналів просування (product feeds), але вам може знадобитися власний формат, і тоді канал доведеться написати самостійно. Розробка каналу дуже схожа на розробку модулів і є добрим способом розібратися, як насправді працюють основи ocStore. Як і решта системи, канали побудовані за шаблоном MVC-L. У цьому посібнику описано, як за допомогою кожного з компонентів MVC-L створити адміністративну і публічну частини каналу.
Адміністративна частина каналу#
Власник магазину, який користується вашим каналом, захоче налаштовувати його в адмінці: вмикати й вимикати канал і змінювати доступні параметри. Як розробник, ви маєте створити сторінку адмінки, на якій редагуються ці налаштування.
Усі файли адмінки розташовані в теці admin/. У ній є чотири теки:
- controller
- view
- language
- model
Кожному каналу потрібно щонайменше по одному файлу в теках view і controller. Деяким знадобляться також файли в теках model і language. Зазвичай усі ці файли мають однакову назву, лише файл представлення має інше розширення (.tpl). Розгляньмо їх по черзі.
Контролер#
Першим створіть контролер сторінки налаштувань каналу. ocStore знаходить канали автоматично, читаючи теку admin/controller/feed вашого магазину. Будь-який канал, файл якого лежить у цій теці, автоматично з'явиться на сторінці Каналів просування і на сторінці прав доступу груп користувачів. Назвіть файл контролера, наприклад, my_feed.php; клас у ньому має називатися ControllerFeedMyFeed.
Контролер містить метод public function index(). Це публічно доступна «сторінка», яка відкривається за посиланням «Змінити» і на яку надсилається форма з представлення. У цьому методі обробляються надіслані дані й зберігаються в таблицю setting бази даних (зазвичай через модель setting/setting).
Також можна визначити метод public function install() — він викликається, коли на сторінці Доповнення > Канали просування натискають «Встановити». Аналогічно метод public function uninstall() викликається при натисканні «Видалити». У цих методах можна створювати й прибирати структури, потрібні каналу (наприклад, таблиці бази даних чи параметри конфігурації). Добра практика — завжди мати метод uninstall(), який прибирає всі зміни, внесені каналом.
Представлення#
Другий обов'язковий файл адмінки — файл представлення. Його створюють у теці admin/view/template/feed з розширенням .tpl, як і всі представлення ocStore. У ньому розміщують форму, яку користувач заповнює й надсилає; вона надсилається в метод index контролера каналу. Найпростіше скопіювати подібне наявне представлення (наприклад, google_base.tpl) і змінити форму під параметри вашого каналу. Назвіть файл, наприклад, my_feed.tpl.
Мовні файли#
Третій файл, який зазвичай потрібен, — мовний. Для кожної мови, яку підтримує канал, потрібен окремий файл у теці admin/language/<назва мови>/feed. Він містить PHP-асоціативний масив $_, де ключ — внутрішня назва, а значення — переклад. Назвіть файл my_feed.php, як і контролер та модель.
Модель#
На боці адмінки модель каналам потрібна рідко. Проте якщо канал використовує власну таблицю бази даних або нестандартний запит для формування даних у певному форматі, модель може знадобитися — наприклад, з методом, який створює додаткову таблицю в базі ocStore. Файл моделі розміщують у теці admin/model/feed і називають, наприклад, my_feed.php, як контролер і мовний файл.
Публічна частина каналу#
Публічна частина каналу влаштована за тим самим принципом, що й адмінка. Що саме міститимуть файли, залежить від призначення каналу. Канал може використовувати будь-які наявні моделі ocStore — не потрібно писати власні запити, якщо такий запит уже є. Наприклад, модель catalog/product містить багато корисних методів для вибірки товарів. Користуйтеся ними замість того, щоб винаходити велосипед.
Контролер публічної частини розміщують у теці catalog/controller/feed (наприклад, catalog/controller/feed/my_feed.php), а сам канал доступний за адресою index.php?route=feed/my_feed. Стандартні канали google_base і google_sitemap не використовують шаблон: вони формують XML прямо в контролері, задають заголовок Content-Type і віддають результат через $this->response->setOutput(). Якщо вам усе ж потрібен шаблон, його розміщують у теці catalog/view/theme/<назва теми>/template/feed. Ця структура тек глибша, ніж в адмінці, через теми: у магазині ocStore може бути багато тем вітрини, але лише один шаблон адмінки.
У публічній частині налаштування, збережені каналом, доступні через об'єкт config контролера, наприклад $this->config->get('my_feed_status'). На їх основі можна керувати тим, що й як віддає канал.