Всем привет, в стандартном шаблоне CMS OpenCart 4.1 мне не нравится как сделана страница категорий — я хочу перенести описание категории вниз (под список товаров) и переделать список подкатегорий — добавить им изображение и добавить нормальное оформление (вместо простого списка что то похожее на карточки товаров).
До:
1. Откроем файл: ../catalog/view/template/product/category.twig и после этих строк:
{% if not categories and not products %} <p>{{ text_no_results }}</p> <div class="text-end"><a href="{{ continue }}" class="btn btn-primary">{{ button_continue }}</a></div> {% endif %}
вставим эти:
{% if image or description %} <hr/> <div class="row"> {% if image %} <div class="col-3"><img src="{{ image }}" alt="{{ heading_title }}" title="{{ heading_title }}" class="img-thumbnail"/></div> {% endif %} {% if description %} <div class="col-9">{{ description }}</div> {% endif %} </div> {% endif %}
и удалим эти строки:
{% if image or description %} <div class="row"> {% if image %} <div class="col-3"><img src="{{ image }}" alt="{{ heading_title }}" title="{{ heading_title }}" class="img-thumbnail"/></div> {% endif %} {% if description %} <div class="col-9">{{ description }}</div> {% endif %} </div> <hr/> {% endif %}
Отлично, описание перемещено, теперь работаем со списком подкатегорий, вместо этих строк:
{% if categories %} <h3>{{ text_refine }}</h3> {% if categories|length <= 5 %} <div class="row"> <div class="col-sm-3"> <ul> {% for category in categories %} <li><a href="{{ category.href }}">{{ category.name }}</a></li> {% endfor %} </ul> </div> </div> {% else %} <div class="row row-cols-sm-2 row-cols-lg-4"> {% set total = category.children|length %} {% if total > 20 %} {% set batch = (total / 4)|round(0, 'ceil') %} {% else %} {% set batch = 5 %} {% endif %} {% for category in categories|batch(batch) %} <div class="col"> <ul> {% for child in category %} <li><a href="{{ child.href }}">{{ child.name }}</a></li> {% endfor %} </ul> </div> {% endfor %} </div> <br/> {% endif %} {% endif %}
вставим эти:
{% if categories %} <h3>{{ text_refine }}</h3> <div class="row"> <div class="col-sm-3"> <ul> {% for category in categories %} <li><a href="{{ category.href }}">{{ category.name }}</a></li> {% endfor %} </ul> </div> </div> {% endif %}
P.S. — мы вывели все подкатегории в один длинный список (нам не нужна разбивка на колонки).
Вместо этой строки:
<li><a href="{{ category.href }}">{{ category.name }}</a></li>
вставляем эти:
<li> <a href="{{ category.href }}"><img src="{{ category.image }}"></a> <a href="{{ category.href }}">{{ category.name }}</a> </li>
2. Откроем файл: ../catalog/controller/product/category.php и вместо этих строк:
foreach ($results as $result) { $filter_data = [ 'filter_category_id' => $result['category_id'], 'filter_sub_category' => false ]; $data['categories'][] = [ 'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), 'href' => $this->url->link('product/category', 'language=' . $this->config->get('config_language') . '&path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url) ]; }
вставим эти:
foreach ($results as $result) { $filter_data = [ 'filter_category_id' => $result['category_id'], 'filter_sub_category' => false ]; if ($result['image'] && is_file(DIR_IMAGE . html_entity_decode($result['image'], ENT_QUOTES, 'UTF-8'))) { $image = $result['image']; } else { $image = 'placeholder.png'; } $data['categories'][] = [ 'image' => $this->model_tool_image->resize($image, $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height')), 'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), 'href' => $this->url->link('product/category', 'language=' . $this->config->get('config_language') . '&path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url) ]; }
Чистим кеши и смотрим что изображения слишком уж большие, давайте их уменьшим?
3. Открываем админку и переходим: Система > Настройки > Редактировать > Изображения > Размер изображения в списке категорий и вместо стандартных 300 x 300 (здесь могла бы быть шутка про тракториста…), задаём 150 x 150, этого более чем достаточно.
Смотрим результат:
Отлично, изображения показываются и даже размеры задаются через админку, теперь можно поработать над оформлением.
4. Вновь откроем файл: ../catalog/view/template/product/category.twig и вместо этих строк:
{% if categories %} <h3>{{ text_refine }}</h3> <div class="row"> <div class="col-sm-3"> <ul> {% for category in categories %} <li> <a href="{{ category.href }}"><img src="{{ category.image }}"></a> <a href="{{ category.href }}">{{ category.name }}</a> </li> {% endfor %} </ul> </div> </div> {% endif %}
вставим эти:
{% if categories %} <h3>{{ text_refine }}</h3> <hr> <div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4"> {% for category in categories %} <div class="col mb-3"> <div class="category-thumb"> <div class="image"><a href="{{ category.href }}"><img src="{{ category.image }}"></a></div> <div class="content"><a href="{{ category.href }}">{{ category.name }}</a></div> </div> </div> {% endfor %} </div> <hr> {% endif %}
Сетку сделали, теперь нужно добавить стили.
5. Откроем файл: ../catalog/view/stylesheet/stylesheet.css и в конец файла добавим эти строки:
.category-thumb { border: 1px solid #ddd; text-align: center; } .category-thumb a { display: block; color: #000; } .category-thumb:hover { border: 1px solid #2196F3; }
Чистим кеши и смотрим результат.
Демонстрационный сайт: demo.moushe.ru (демо сайт обновляется вместе с выходом новых статей).
На сегодня всё, до новых встреч.