Наверняка те, кто часто делает интернет-магазины на популярной 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 - ссылка на товар.
Эти данные теперь можно использовать в шаблоне шапки там где планируется выводить корзину.