Корзина товаров в шапке сайта на Opencart

Наверняка те, кто часто делает интернет-магазины на популярной Opencart, столкнулись с необходимостью выноса корзины товаров куда нибудь в шапку сайта.

Такая возможность на самом деле реализуется довольно таки просто.

В файл контроллера шапки \catalog\controller\common\header.php в самом конце метода index() перед $this->render(); нужно добавить следующий код:

$this->language->load('module/cart');

      $this->load->model('tool/seo_url');

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

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

      $this->data['products'] = array();

       foreach ($this->cart->getProducts() as $result) {
           $option_data = array(); 

           foreach ($result['option'] as $option) {
                $option_data[] = array(
                  'name'  => $option['name'],
                  'value' => $option['value']
                );
           }

            $this->data['products'][] = array(
              'name'     => $result['name'],
            'option'   => $option_data,
              'quantity' => $result['quantity'],
            'stock'    => $result['stock'],
            'price'    => $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'))),
            'href'     => $this->model_tool_seo_url->rewrite($this->url->http('product/product&product_id=' . $result['product_id'])),
            );
       } 

       $this->data['subtotal'] = $this->currency->format($this->cart->getTotal());

      $this->data['ajax'] = $this->config->get('cart_ajax');

В результате в файле шаблона header.tpl станет доступна переменная $products , котороая по сути являет собой ассоциативный массив с полями name - название товара, option - опции, quantity - количество, stock - наличие на складе, price - цена товара, href - ссылка на товар.

Эти данные теперь можно использовать в шаблоне шапки там где планируется выводить корзину.