Конвертация модулей OpenCart с 1.5.х до 2.х.х

Конвертация модулей OpenCart с 1.5.х до 2.х.х

От автора: С релиза 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!

Создайте интернет-магазин на самой популярной 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');<br>

Присвоение переменных

Можно сказать, это одно из главных изменений в контексте метода контроллера, так как в большинстве случаев вы в итоге присваиваете переменной значение, чтобы потом вызвать их в файлах шаблонов представления.

В версии 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!

Создайте интернет-магазин на самой популярной 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.х.х. Надеюсь, вам понравилось. Не стесняйтесь делиться мыслями по теме!

Автор: Sajal Soni

Источник: http://code.tutsplus.com/

Редакция: Команда webformyself.

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

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

Приступить к созданию
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Интернет-магазин на OpenCart

Создание магазина с уникальным шаблоном на CMS OpenCart

Научиться

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree