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