В 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);


