Интернет-магазины бывают разные. Одни используют корзину, в других ее нет. В одних достаточно иметь один тип товара, в других множество различных типов с отдельным набором опций. И т.д. и т.п.
Разрабатывать под каждый интернет-магазин дополнительный модуль, который будет удовлетворять условиям конкретного магазина совсем не выход.
В итоге, с каждым реализованным интернет-магазином, модуль eshop все больше и больше становился универсальным.
И вот теперь, наконец-то разработано решение, которое способно удовлетворить большую часть запросов по внешнему виду товара на страницах сайта.
Опция товара — это именно та сущность, которая описывает сам товар, его характеристики, а так же влияет на его отображение на страницах сайта. Поэтому элемент шаблона в модуль eshop теперь умеет понимать значения опций товара и в зависимости от них применять тот или иной HTML-блок.
Для применения этой возможности, необходимо в заголовке шаблона товара определить параметр options со списком опций товара в формате JSON.
Например (полный код на GitHub product_list_item.html):
[bkvar=options]
[
{"name": "price"},
{
"name": "sklad",
"count": 2
},
{"name": "new"},
{"name": "akc"},
{"name": "hit"}
]
[/bkvar]
В сборке страницы будут участвовать опции товара: price, sklad, new, akc, hit.
А именно, модуль в процессе сборки, будет искать именную переменную шаблона опции, брать ее значение и вставлять в указанное место тела шаблона.
В данном случае, для опции price определены следующие переменные шаблона:
[bkvar=option-price-container]
<div class="price"><span>{v#result}</div>
[/bkvar]
[bkvar=option-price]
<span class="price-value">{v#fld_price}</span> {v#currency}
[/bkvar]
[bkvar=option-price-empty]Цену уточняйте[/bkvar]
[bkvar=option-sklad-container-1]
<div class="quantity">
{v#result}
</div>
[/bkvar]
где,
option-price — используется, если price>0
option-price-empty - используется, если price=0
option-price-container — обертка, перед вставкой в тело шаблона
Причем, если модуль не находит именную переменную option-[name] и option-[name]-empty, то он считает ее пустой. Если не находит именную переменную обертки option-[name]-container, то результат вставляется в шаблоне без нее.
Место вставки обработанной опции в процессе сборки в тело шаблона определяется меткой {v#option-[name]}. Для опции price — это будет {v#option-price}.
<div class="caption">
...
{v#option-price}
...
</div>
А что делать, если нужно использовать несколько различных вариантов HTML-кода для одной опции?
Тогда необходимо применить параметр count, описывая опцию в options.
Например, для опции sklad (количество на складе) указано использование 2-х вариантов HTML-кода:
...
{
"name": "sklad",
"count": 2
},
...
Причем, важно обратить внимание, что именные опции в данном случае приобретают формат: option-[name]-[N], option-[name]-empty-[N], option-[name]-container-[N], где N — порядковый номер, начинающийся с 1.
В данном случае, для опции sklad определены следующие переменные шаблона:
[bkvar=option-sklad-container-1]
<div class="quantity">
{v#result}
</div>
[/bkvar]
[bkvar=option-sklad-1] <span>В наличие</span> [/bkvar]
[bkvar=option-sklad-empty-1] <span>Под заказ</span> [/bkvar]
[bkvar=option-sklad-empty-2] quantity-empty [/bkvar]
Обратите внимание, для 2-го варианта используется HTML-код, если sklad=0
В данном случае, в тело шаблона добавляется: 1-й вариант — информация о наличии на складе (в наличие/под заказ), 2-й варинат — к HTML элементу DIV применяется класс quantity-empty, если товара нет в наличие.
...
<div class="thumbnail {v#option-sklad-2}">
...
Полный листинг примера смотрите на GitHub: product_list_item.html
Напомню, что для самостоятельной настройки шаблона отображения товара на своем сайте, необходимо перегружать элемент шаблона модуля в своем шаблоне сайта.
Например, для изменения отображения товара в списке, необходимо перегрузить элемент шаблона product_list_item.html в своем шаблоне: /tt/[свой шаблон]/eshop/override/brick/product_list_item.html
А так же, для частичной перегрузки шаблона: /tt/[свой шаблон]/eshop/override/brick-part/product_list_item.html
Версия модуля EShop >= 0.2.4
Официальная сборка новой версии платформы 0.5.6: https://github.com/abricos/abricos/