Адаптация модулей для OpenCart 1.5.x к OpenCart 2

Дата: 23.02.2016 Просмотров: 1901 Комментарии: 0

В OpenCart, как и в любом другом программном продукте, смена мажорной версии означает потерю совместимости. Модули под версии 1.5.x больше не подходят для OpenCart 2, их придется адаптировать. Итак, что нужно менять в старых дополнениях.

Рендеринг шаблона

Раньше для передачи данных в шаблон надо было менять поле $data контроллера, сам шаблон брался из поля $title, а вывод осуществлял метод render:

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/example.tpl')) {
    $this->template = $this->config->get('config_template') . '/template/module/example.tpl';
} else {
    $this->template = 'default/template/module/example.tpl';
}
$this->render();

теперь используются локальные переменные метода контроллера:

$data = array();

$data['title'] = $this->language->get('title');

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/example.tpl')) {
    $template = $this->config->get('config_template') . '/template/module/example.tpl';
} else {
    $template = 'default/template/module/example.tpl';
}

$this->response->setOutput($this->load->view($template, $data));

Иначе теперь стали выводиться хедеры, футеры и другие подчиненные (children) блоки. Например, для страниц в админке было так:

$this->children = array(
    'common/header',
    'common/footer'
);

стало так:

$data['header'] = $this->load->controller('common/header');
$data['column_left'] = $this->load->controller('common/column_left');
$data['footer'] = $this->load->controller('common/footer');

Обратите внимание, что в админке OpenCart 2 левая колонка выделена в отдельный шаблон.

По-другому теперь осуществляется переадресация (redirect).

Было так:

$this->redirect($this->url->link('extension/feed', 'token=' . $this->session->data['token'], 'SSL'));

стало:

$this->response->redirect($this->url->link('extension/feed', 'token=' . $this->session->data['token'], 'SSL'));

Модуль оплаты

В контроллере модуля оплаты метод index был protected:

class ControllerPaymentMethod extends Controller {
	protected function index() {

стал public:

class ControllerPaymentMethod extends Controller {
	public function index() {

Платежные модули при успешной оплате обычно меняют статус заказа. Раньше статус менялся так:

$this->model_checkout_order->confirm($order_id, $order_status_id, 'Pmethod');

а начиная с версии 2 - вот так:

$this->model_checkout_order->addOrderHistory($order_id, $order_status_id);

Комментарии

Написать комментарий


Популярные предложения