Конвертація модулів OpenCart з 1.5.х до 2.х.х

23

Від автора: З релізу OpenCart 2.x.x пройшло вже достатньо часу, і на даний момент, схоже, все стабілізувалося (наскільки це відноситься до API ядра). Велика частина популярних розширень версії 2 підтримує.х.х, але код 1.5.х нікуди не подівся. У мережі ви знайдете безліч розширень для мігрування з 1.5.х на останню версію.

Є, звичайно, певні обмеження з розширеннями. Вони не вміють конвертувати все підряд, особливо кастомні модулі. У цій статті ми розглянемо код основних компонентів модуля OpenCart. Потім дізнаємося, як конвертувати OpenCart модулі в сумісний з OpenCart 2.x.x. Не будемо розводитися, перейдемо до суті!

Зміни у файлі контролера

У цьому розділі ми розглянемо необхідні зміни в коді файлу контролера. В якості прикладу я вибрав файл account.php у папці catalog/controller/account

URL редирект

Розглянемо код редіректу на версіях 1.5.х. У старій версії метод redirect входив в абстрактний клас Controller, тому його можна було викликати безпосередньо з допомогою об’єкта $this.

$this->redirect($this->url->link(‘account/login’, «, ‘SSL’));

Як тепер це виглядає у версії 2.х.х. В останній версії метод redirect належить класу Response, тому і доступ до нього здійснюється через об’єкт класу.

Конвертація модулів OpenCart з 1.5.х до 2.х.х

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

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

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

$this->response->redirect($this->url->link(‘account/login’, «, ‘SSL’));

Завантаження файлів мови

1.5.х необхідно було використовувати наступний код для завантаження відповідного файлу мовного модуля.

$this->language->load(‘account/account’);

В OpenCart 2.x.x необхідно використовувати злегка змінений код.

$this->load->language(‘account/account’);

Присвоєння змінних

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

У версії 1.5.х було так:

$this->data[‘heading_title’] = $this->language->get(‘heading_title’);

2.х.х так:

$data[‘heading_title’] = $this->language->get(‘heading_title’);

Як бачите, в останній версії масив $data готується окремо і передається як аргумент подання. У ранній версії це було властивість абстрактного класу Controller.

Хлібні крихти

В останній версії не потрібен ключ масиву separator.

Код 1.5.х:

$this->data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘text_home’),
‘href’ => $this->url->link(‘common/home’),
‘separator’ => false
);

Те ж саме можна записати по-іншому:

$data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘text_home’),
‘href’ => $this->url->link(‘common/home’)
);

Призначення дочірніх шаблонів

1.5.х для призначення усіх дочірніх шаблонів типу header, footer, column_left і т. д. необхідний масив.

Конвертація модулів OpenCart з 1.5.х до 2.х.х

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

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

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

$this->children = array(
‘common/column_left’,
‘common/column_right’,
‘common/content_top’,
‘common/content_bottom’,
‘common/footer’,
‘common/header’
);

2.х.для цього потрібний метод controller класу Loader.

$data[‘column_left’] = $this->load->controller(‘common/column_left’);
$data[‘column_right’] = $this->load->controller(‘common/column_right’);
$data[‘content_top’] = $this->load->controller(‘common/content_top’);
$data[‘content_bottom’] = $this->load->controller(‘common/content_bottom’);
$data[‘footer’] = $this->load->controller(‘common/footer’);
$data[‘header’] = $this->load->controller(‘common/header’);

Призначення шаблонів

У ранній версії OpenCart призначення і рендер шаблонів можна було зробити так.

if (file_exists(DIR_TEMPLATE . $this->config->get(‘config_template’) . ‘/template/account/account.tpl’)) {
$this->template = $this->config->get(‘config_template’) . ‘/template/account/account.tpl’;
} else {
$this->template = ‘default/template/account/account.tpl’;
}
$this->response->setOutput($this->render());

В останній версії код трохи коротше.

if (file_exists(DIR_TEMPLATE . $this->config->get(‘config_template’) . ‘/template/account/account.tpl’)) {
$this->response->setOutput($this->load->view($this->config->get(‘config_template’) . ‘/template/account/account.tpl’, $data));
} else {
$this->response->setOutput($this->load->view(‘default/template/account/account.tpl’, $data));
}

В останній версії ми використовуємо метод view класу Loader.

Щодо змін контролера все. З допомогою чеклиста вище ви тепер можете конвертувати код контролера зі старої на нову версію.

Зміни у файлі моделі

Хоча файли моделі майже ідентичні в обох версіях, в останній версії OpenCart була представлена нова функція Event Notifications. Відмінна концепція, за допомогою якої можна запускати певні події, тим самим інформую відповідні обзорщики при їх доступності.

З допомогою Event Notifications можна дозволити модифікацію даних іншими модулями, які реалізують обзорщики для зв’язаних подій до збереження в базу даних. Погляньмо на приклад коду з файлу catalog/model/account/address.php.

$this->event->trigger(‘pre.customer.add.address’, $data);

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

Зміни у файлі подання

В останньому розділі цього уроку ми обговоримо зміни компонента view модуля. Введення бібліотеки BootStrap – одне з основних змін, що зробило шаблони адаптивними. Звичайно, ваші старі шаблони будуть працювати в останній версії теж, але вони не будуть адаптивними. OpenCart 2.x.x дотримується підходу mobile first, тому ви не можете ігнорувати адаптивність шаблону.

Відкрийте catalog/view/theme/default/template/account/account.tpl. У файлі можна помітити класи CSS типу «col-sm-6» and «col-sm-9» – індикатори присутності бібліотеки BootStrap. BootStrap тепер лежить у ядрі, тому можна використати її функції.

У файлах подання необхідно конвертувати старий XHTML код в нову адаптивну структуру. В іншому все так само, змінні друкуються так само, дочірні шаблони підключаються так само.

Для сьогоднішньої статті достатньо. Впевнений, що описані вище кроки допоможуть вам конвертувати ваші модулі з 1.5.х до 2.х.х.

Висновок

Сьогодні ми обговорили, які зміни необхідно внести в існуючі файли модулів 1.5.х, щоб конвертувати їх в 2.х.х. Сподіваюся, вам сподобалося. Не соромтеся ділитися думками по темі!

Конвертація модулів OpenCart з 1.5.х до 2.х.х

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

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

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