Правильный вывод названий подкатегорий в магазине OpenCart 4
Столкнулся с такой проблемой как : если делаешь категории хотя бы со вторым уровнем вложенности (например: Инструменты/ручной, Инструменты/электрический) то в breadcrumb и в названии категории выводится только родительская, что есть не очень хорошо.
Вот решение этой проблемы как сделал её я:
в контроллере opencart4/catalog/controller/product/category.php
перед строкой
1 | $data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0)); |
заменил
1 2 3 4 5 6 | // Set the last category breadcrumb $data['breadcrumbs'][] = [ 'text' => $category_info['name'], 'href' => $this->url->link('product/category', 'language=' . $this->config->get('config_language') . $url) ]; $data['heading_title'] = $category_info['name']; |
на это:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | //tematut правильно отображение название категорий, можно выводить или name или meta_title if ($category_id==$category_info['category_id']){ $data['heading_title'] = $category_info['name']; // Set the last category breadcrumb $data['breadcrumbs'][] = [ 'text' => $category_info['name'], 'href' => $this->url->link('product/category', 'language=' . $this->config->get('config_language') . $url) ]; }else{ $category_name = $this->model_catalog_category->getCategory($category_id); $data['heading_title'] = $category_name['meta_title']; // Set the last category breadcrumb $data['breadcrumbs'][] = [ 'text' => $category_name['name'], 'href' => $this->url->link('product/category', 'language=' . $this->config->get('config_language') . $url) ]; } |
Работает !!!
Дальше нужно было вывести названия категорий в самом товаре в карточке товара.
Для этого в модель opencart4/catalog/model/catalog/product.php
добавили функцию
1 2 3 4 5 6 7 8 9 10 11 | /** * tematut add category name on product page */ public function getCategoryNames($product_id) { $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "category_description cd LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p2c.category_id = cd.category_id) WHERE p2c.product_id = '" . (int)$product_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "'"); return $query->rows; } |
в контроллере opencart4/catalog/controller/product/product.php
перед строкой
1 | $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8'); |
добавим
1 | $data['category_list'] = $this->model_catalog_product->getCategoryNames($product_id); |
и в самом шаблоне product.twig вставим следующее
1 2 3 4 5 6 7 | {% if category_list%} <li>Каталог {% for categorylist in category_list %} / {{ categorylist.name }} {% endfor %} </li> {% endif %} |
Вот пожалуй и всё! спасибо за внимание. Буду рад комментам.
Версия Opencart Version 4.0.2.3
Супер! спасибо, задолбался искать решение этой проблемы