В интернет-магазине JoomShopping мы делаем свой шаблон, копируя штатный - components/com_jshopping/templates/default
. Переименовываем папку с шаблоном из default во что-то своё, то же самое с components/com_jshopping/css/default.css
(либо не используем вообще). И можно без проблем дальше пилить под свои нужды.
В настройках можно включить "Использовать разные шаблоны для отдельных категорий и товаров". Тогда для категории и для карточки товара можно будет указывать эти шаблоны в настройках. Какие-то товары у нас просто товары, а какие-то - фильдипёрсовые и для них отдельный дизайн.
Карточка товара
Тут всё просто: идём в components/com_jshopping/templates/ВАШ_ШАБЛОН/product
и переименовываем product_default.php в product_ВАШЕНАЗВАНИЕ.php. Именно так, только с одним нижним подчёркиванием. product_default.php подключает с помощью include()
все остальные файлы из этой папки. Их мы так же можем уникализировать путём копирования. А в product_ВАШЕНАЗВАНИЕ.php подправить подключение.
Шаблон категории товаров
Тут с виду тоже всё просто. Идём в components/com_jshopping/templates/ВАШ_ШАБЛОН/category. Видим там 3 файла:
- maincategory.php - это макет главной категории. У него есть список категорий и описание текстом.
- category_default.php - это те самые шаблоны, которые мы можем выбрать в настройках категории в админке. Принцип такой же как и с товаром. Здесь уже подключается отображение товаров с помощью файла product.php.
- products.php - в нём содержится базовая разметка для отображения стандартного фильтра (количество, убывание/возрастание и т.д.), сообщения "нет товаров" и пагинации внизу.
А вот запчасти для списка товаров находятся уже в папке list_products. Так как эти же запчасти используются для списка товаров производителя, вендора и т.д.
<?php
include(__DIR__ . "/../" . $this->template_block_list_product);
Эта конструкция как раз и содержит путь для подключения файла components/com_jshopping/templates/ВАШ_ШАБЛОН/list_products/list_products.php, в котором в свою очередь циклом выводится содержимое файла components/com_jshopping/templates/ВАШ_ШАБЛОН/list_products/product.php. Этот последний product.php и есть товар в списке товаров.
Что делать, если нам нужны разные макеты и здесь?.. В зависимости от выбранного макета категории?
Правильно. Мы должны всё продублировать. Например, мой макет категории будет называться category_premade.php.
В файле components/com_jshopping/templates/ВАШ_ШАБЛОН/category/category_premade.php я подключаю components/com_jshopping/templates/ВАШ_ШАБЛОН/category/products_premade.php. В нём мы подменяем путь на свой:
<?php
// Отдельный макет для готовой продукции
$this->template_block_list_product = 'list_products/list_productspremade.php';
include(__DIR__ . "/../" . $this->template_block_list_product);
и теперь подключается файл components/com_jshopping/templates/ВАШ_ШАБЛОН/list_products/list_productspremade.php.
В нём в цикле подключается файл product.php из той же папки. Путь к нему запрятан в:
<?php
include(__DIR__ . "/" . $product->template_block_product);
Поэтому мы и тут подменяем путь и пишем своё:
<?php
foreach ($this->rows as $k => $product)
{
$product->template_block_product = 'product_premade.php';
include(__DIR__ . "/" . $product->template_block_product);
}
А уже в своей копии product.php - product_premade.php - мы делаем всё, что хотим.
В моём случае мне нужно было выводить разные названия кнопок в зависимости от типа продукции: "создать дизайн" для основных категорий. И обычное "купить" и "в корзину" для категорий с готовой продукцией.