OpenCart — від новачка до професіонала: розробка модуля

347

Від автора: у попередніх статтях ми розглянули структуру MVC і створили в OpenCart наш перший Контролер, Модель і Подання. Ми зробили це, щоб краще зрозуміти основну суть. В OpenCart розробка модулів має величезне значення. І сьогоднішню статтю присвячено саме цій темі.

Що таке модулі OpenCart?

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

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

OpenCart має свій власний Каталог розширень, в якому представлено велику кількість готових рішень. Ви також можете знайти найрізноманітніші модулі розширення OpenCart на Envato Market.

OpenCart — від новачка до професіонала: розробка модуля

OpenCart — від новачка до професіонала: розробка модуля

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

Наш перший модуль

В якості прикладу давайте створимо простий модуль OpenCart «Hello World». Він призначений для введення інформації через панелі управління і відображення її через інтерфейс сайту. OpenCart містить кілька попередньо встановлених модулів. Ми постараємося використовувати їх, коли це буде можливо. Для початку виконайте наступні дії:

Створіть контролер для шляху до панелі адміністрування: admin/controller/module/helloworld.php.

Створіть файл мови для шляху до панелі адміністрування: admin/language/english/module/helloworld.php.

Подання шляху до панелі адміністрування: admin/view/template/module/helloworld.tpl.

Файл мови

Файл мови складається із статичного тексту, який повинен відображатися у нашому файлі. Наступні змінні у файлі helloworld.php містять текстові поля які потрібні для відображення тексту в модулі.

Контролер

Відкрийте файл контролера «Hello World», який ми тільки що створили, і додайте в нього клас class ControllerModuleHelloworld extends Controller {} відповідно до Конвенції про присвоєння імен класу . Потім додайте в цей клас наступний код.

Крок 1: Функція за замовчуванням

private $error = array(); // використовується для установки помилки, якщо така виникла.
public function index() { // функція за замовчуванням
$this->language->load(‘module/helloworld’); // Завантаження файлу мови helloworld
$this->document->setTitle($this->language->get(‘heading_title’)); // Встановлюємо заголовок сторінки в шапці файлу мови, тобто Hello World
$this->load->model(‘setting/setting’); // Завантажуємо Setting Model (всі моделі та загальні налаштування в OpenCart зберігаються за допомогою цієї моделі)
if (($this->request->server[‘REQUEST_METHOD’] == ‘POST’) && $this->validate()) { // Початок If : валідація та верифікація даних якщо вони передані з допомогою безпечного методу (POST)
$this->model_setting_setting->editSetting(‘helloworld’, $this->request->post); //Аналіз і передача вхідних даних у Setting Model для збереження у базі даних.
$this->session->data[‘success’] = $this->language->get(‘text_success’); // Для виведення тексту про те, що дані успішно збережено
$this->redirect($this->url->link(‘extension/module’, ‘token=’ . $this->session->data[‘token’], ‘SSL’)); // редирект в Module Listing
} // кінець If
/*Призначаємо дані мови для аналізу і передачі їх подання*/
$this->data[‘heading_title’] = $this->language->get(‘heading_title’);
$this->data[‘text_enabled’] = $this->language->get(‘text_enabled’);
$this->data[‘text_disabled’] = $this->language->get(‘text_disabled’);
$this->data[‘text_content_top’] = $this->language->get(‘text_content_top’);
$this->data[‘text_content_bottom’] = $this->language->get(‘text_content_bottom’);
$this->data[‘text_column_left’] = $this->language->get(‘text_column_left’);
$this->data[‘text_column_right’] = $this->language->get(‘text_column_right’);
$this->data[‘entry_code’] = $this->language->get(‘entry_code’);
$this->data[‘entry_layout’] = $this->language->get(‘entry_layout’);
$this->data[‘entry_position’] = $this->language->get(‘entry_position’);
$this->data[‘entry_status’] = $this->language->get(‘entry_status’);
$this->data[‘entry_sort_order’] = $this->language->get(‘entry_sort_order’);
$this->data[‘button_save’] = $this->language->get(‘button_save’);
$this->data[‘button_cancel’] = $this->language->get(‘button_cancel’);
$this->data[‘button_add_module’] = $this->language->get(‘button_add_module’);
$this->data[‘button_remove’] = $this->language->get(‘button_remove’);
/*Цей блок повертає попередження*/
if (isset($this->error[‘warning’])) {
$this->data[‘error_warning’] = $this->error[‘warning’];
} else {
$this->data[‘error_warning’] = “;
}
/*Кінець блоку*/
/*Цей блок повертає код помилки, якщо така виникла*/
if (isset($this->error[‘code’])) {
$this->data[‘error_code’] = $this->error[‘code’];
} else {
$this->data[‘error_code’] = “;
}
/*Кінець блоку*/
/* Створення хлібних крихт для виведення їх на сайті*/
$this->data[‘breadcrumbs’] = array();
$this->data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘text_home’),
‘href’ => $this->url->link(‘common/home’, ‘token=’ . $this->session->data[‘token’], ‘SSL’),
‘separator’ => false
);
$this->data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘text_module’),
‘href’ => $this->url->link(‘extension/module’, ‘token=’ . $this->session->data[‘token’], ‘SSL’),
‘separator’ => ‘::’
);
$this->data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘heading_title’),
‘href’ => $this->url->link(‘module/helloworld’, ‘token=’ . $this->session->data[‘token’], ‘SSL’),
‘separator’ => ‘::’
);
/* Кінець блоку хлібних крихт*/
$this->data[‘action’] = $this->url->link(‘module/helloworld’, ‘token=’ . $this->session->data[‘token’], ‘SSL’); // URL to be directed when the save button is pressed
$this->data[‘cancel’] = $this->url->link(‘extension/module’, ‘token=’ . $this->session->data[‘token’], ‘SSL’); // URL to be redirected when cancel button is pressed
/* Цей блок перевіряє, задано чи текстове поле hello world, якщо так, аналізує його і передає подання, в іншому випадку отримує значення текстового поля hello world за замовчуванням з бази даних і аналізує та передає його*/
if (isset($this->request->post[‘helloworld_text_field’])) {
$this->data[‘helloworld_text_field’] = $this->request->post[‘helloworld_text_field’];
} else {
$this->data[‘helloworld_text_field’] = $this->config->get(‘helloworld_text_field’);
}
/*кінець блоку*/
$this->data[‘modules’] = array();
/*Цей блок аналізує та передає до подання такі налаштування модуля як Макет,Позиція,Порядок*/
if (isset($this->request->post[‘helloworld_module’])) {
$this->data[‘modules’] = $this->request->post[‘helloworld_module’];
} elseif ($this->config->get(‘helloworld_module’)) {
$this->data[‘modules’] = $this->config->get(‘helloworld_module’);
}
/* кінець блоку*/
$this->load->model(‘design/layout’); // Завантажуємо модель макета дизайну
$this->data[‘layouts’] = $this->model_design_layout->getLayouts(); // Отримання макета доступного в системі
$this->template = ‘module/helloworld.tpl’; //Завантаження шаблону helloworld.tpl
$this->children = array(
‘common/header’,
‘common/footer’
); // Додавання дочірніх елементів для нашого шаблону за замовчуванням, тобто helloworld.tpl
$this->response->setOutput($this->render()); // Відображення
}

Крок 2: Метод валідації

Нам потрібно перевірити дані, збережені у функції за замовчуванням. Для цього використовується такий метод валідації.

/* Функція, яка виробляє валідацію даних при натисканні кнопки Зберегти */
protected function validate() {
/* Блок перевірки прав доступу користувача для роботи з модулем*/
if (!$this->user->hasPermission(‘змінити’, ‘module/helloworld’)) {
$this->error[‘warning’] = $this->language->get(‘error_permission’);
}
/* Кінець блоку*/
/* Блок для перевірки заданий helloworld_text_field належним чином і збереження його в базі даних, в іншому випадку повертається помилка*/
if (!$this->request->post[‘helloworld_text_field’]) {
$this->error[‘code’] = $this->language->get(‘error_code’);
}
/* Кінець блоку*/
/*Блок повертає true якщо помилок не виявлено, інакше повертає false */
if (!$this->error) {
return true;
} else {
return false;
}
/*Кінець блоку*/
}
/* Кінець функції валідації*/

Тепер збережіть цей файл. Ми закінчили створення контролера адміністрування для нашого модуля Hello World.

OpenCart — від новачка до професіонала: розробка модуля

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

Файл подання

Як ми робили це раніше в контролері, тепер нам потрібно створити HTML-код для подання. Для цього ми зробимо наступне:

Крок 1. Створення основних елементів управління

form — це елемент, який містить такі елементи як: input, textarea і кнопки для збереження введених даних або скасування введення. Щоб створити цю форму, використовується такий код:

Крок 3. Додавання JavaScript.

Як бачите, в попередньому кроці ми створили кнопку « Add Module». Зокрема у нас є:

де користувач може додати кілька рядків для відображення модуля за допомогою різних макетів і в різних місцях.

Для цього нам потрібно створити JavaScript, який додасть рядок в список. Це поліпшить користувальницький інтерфейс для тих, хто використовує наш модуль:

Крок 4: Додавання футера

Тепер нам потрібно додати футер наприкінці вистави:

На даний момент ми закінчили підготовку нашого першого модуля Hello World . Тепер настав час перевірити, чи він працює. Для цього увійдіть в панель управління і перейдіть на сторінку Розширення — Модулі, де ви можете побачити список модулів OpenCart System. У списку ви побачите пункт «Hello World» зі статусом «Не встановлений», натисніть «Встановити» і на екрані має з’явитися панель наведена на скріншоті нижче:

OpenCart — від новачка до професіонала: розробка модуля

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

Висновок

У цій статті ми створили базовий модуль OpenCart, використовуючи MVC. Якщо ви знайомі з основними концепціями MVC, вам буде просто працювати з модулями OpenCart. Основні принципи створення модулів я описав. У наступній статті ми почнемо роботу з інтерфейсом і спробуємо розширити його різними елементами.

OpenCart — від новачка до професіонала: розробка модуля

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення