Здесь один из вариантов изменения отображения списка подкатегорий для Opencart 2, скорее всего подойдет и для версии 1.5 (большой разницы в этой части нет)
Понадобится: внести изменения в контроллер и шаблон квтегории, таблицу стилей и при необходимости найти изображение-заглушку для иконки, если не задано в настройках категории.
Что должно получиться в итоге:
- Название категории изначально состоящее из заголовка и количества товаров разбивается на две части
- Добавляется изображение
Изменения в контроллере категории
Открываем файл /catalog/controller/product/category.php
Здесь находим:
$data['categories'][] = array(
Перед этой строкой добавим код для получения изображения, с проверкой. Если изображения для категории нет, используем заглушку - стандартный no_image.png в изображениях опенкарта.
if ($result['image']) {
$caimage = $this->model_tool_image->resize($result['image'], 100, 100);
} else {
$caimage = $caimage = $this->model_tool_image->resize('no_image.png', 100, 100);
}
После найденной строки добавляем изображение, а так же разбиваем 'name' на 2 части - имя категории и счетчик товаров. Должно в итоге получиться так:
$data['categories'][] = array(
'name' => $result['name'],
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url),
'image' => $caimage,
'count' => ($this->config->get('config_product_count') ? $this->model_catalog_product->getTotalProducts($filter_data) : '')
);
Теперь перейдем к шаблону.
Изменения в шаблоне
Открываем файл /catalog/view/theme/default/template/product/category.tpl и находим следующий код (29-54 строки в шаблоне по умолчанию, в других шаблонах могут быть отличия):
<?php if ($categories) { ?>
<h3><?php echo $text_refine; ?></h3>
<?php if (count($categories) <= 5) { ?>
<div class="row">
<div class="col-sm-3">
<ul>
<?php foreach ($categories as $category) { ?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
<?php } ?>
</ul>
</div>
</div>
<?php } else { ?>
<div class="row">
<?php foreach (array_chunk($categories, ceil(count($categories) / 4)) as $categories) { ?>
<div class="col-sm-3">
<ul>
<?php foreach ($categories as $category) { ?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
<?php } ?>
</ul>
</div>
<?php } ?>
</div>
<?php } ?>
<?php } ?>
Здесь идет проверка количества категорий и в зависимости от результата разбивка на столбцы, данную проверку убираем, выводим изображение и счетчик товаров. Учитывая, что в контроллере есть проверка на включение отображения количества товаров в настройках, сделаем так же проверку и в шаблоне. Должно получиться так:
<?php if ($categories) { ?>
<h3><?php echo $text_refine; ?></h3>
<div class="row">
<div class="subcats">
<ul>
<?php foreach ($categories as $category) { ?>
<li class="col-sm-3">
<a href="<?php echo $category['href']; ?>">
<img src="<?php echo $category['image']; ?>" alt="<?php echo $category['name']; ?>" />
<?php echo $category['name']; ?>
</a>
<?php if ($category['count']) { echo '<span class="count">'. $category['count'].'</span>';} ?>
</li>
<?php } ?>
</ul>
</div>
</div>
<?php } ?>
Добавляем в CSS
.subcats ul {padding: 0px;list-style-type:none;}
.subcats li {margin-bottom: 20px;text-align: center;}
.subcats li img {display: block;border-radius: 50px;margin: 0px auto 10px auto;border: 1px solid #ECECEC;}
.subcats .count {position: absolute;top: 0px;left: 50%;background: #FF6A00;color: #fff;text-align: center;line-height: 30px;width: 30px;border-radius: 15px;margin-left: 32px;border: 1px solid #ECECEC;}
Вывод подкатегорий с пропуском одного уровня
Если необходимо вывести на странице категории первого уровня сразу третий уровень, минуя второй - это для Вас.
Если Нужно оставить второй уровень.. напремер в виде заголовков, то можно сделать по аналогии с модулем "категории", там очень похоже. Здесь же вариант, при котором будет отображен только третий уровень без разбивки. При этом не потребуется вносить дополнительные изменения в шаблон, только контроллер: /catalog/controller/product/category.php
1. Находим:
$data['categories'] = array();
Вырезаем оттуда где нашли и вставляем после
$results = $this->model_catalog_category->getCategories($category_id);
foreach ($results as $result) {
2. Далее меняем (с изменениями из предыдущего примера):
$data['categories'][] = array(
'name' => $result['name'],
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url),
'image' => $caimage,
'count' => ($this->config->get('config_product_count') ? $this->model_catalog_product->getTotalProducts($filter_data) : '')
);
На
$cats = $results = $this->model_catalog_category->getCategories($result['category_id']);
foreach ($cats as $cat) {
if ($cat['image']) {
$caimage = $this->model_tool_image->resize($cat['image'], 100, 100);
} else {
$caimage = $caimage = $this->model_tool_image->resize('no_image.png', 100, 100);
}
$data['categories'][] = array(
'name' => $cat['name'],
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $cat['category_id'] . $url),
'image' => $caimage,
'count' => ($this->config->get('config_product_count') ? $this->model_catalog_product->getTotalProducts($filter_data) : '')
);
}
Здесь как видите, кроме прочего добавился и вывод изображений, уже в новом цикле, соответственно то что было выше - нужно убрать.
А в twig как это конвертировать? Статья очень крутая, но к сожалению не дружественна с опенкарт 3
Добрый день!
Спасибо за полезную статью!
Единственное подскажите пожалуйста, если категорий больше 5, выводятся только 2 последние.
Как сделать что бы выводились все создание категории?
Зарание спасибо!
Здравствуйте! Не сталкивался с подобным. До этих изменений выводились все?
Спасибо, вчера разобрался!
Может кому то поможет!
Я закоментировал основной код (не хотел сразу его удалять) и добавил код вывода картинки.
Из-за етого и выводились только 5 категорий, а если их больше выводились только последние одна или две!
Спасибо за помощь!
2.3.0.2 ЧТО ТО НЕ ПОЛУЧАЕТСЯ 3 РАЗА ВСЕ ПЕРЕДЕЛЫВАЛ ОШИБКА ERR 500
Если есть лог серверных ошибок — сразу все понятно станет. ну или сбросьте на vl@onenv.ru контроллер и шаблон
Здравствуйте! лучше был бы модификатор
Спасибо за помощь.Вопрос решон
ЗДРАВСТВУЙТЕ! Не могли бы помочь поправить стили css Вывод изображения подкатегори при мобильном просмотре в низ уходят, как сделать чтобы были в ряду 2
Здравствуйте! В шаблоне, если он на bootstrap, там где элементы списка:
Спасибо, долго искал подобное решение, все работает и в отличии от других перепробованных вариантов не портит мобильную версию.
Спасибо за Ваш труд всё получилось просто шикарно, единственное поменял цвет кружочков rgba(4, 8, 103, 0.42) на вот такой получился полупрозрачный и за ним видно картинку — спасибо давно такое хотел сделать