Интернет-магазины бывают разные. Одни используют корзину, в других ее нет. В одних достаточно иметь один тип товара, в других множество различных типов с отдельным набором опций. И т.д. и т.п.

Разрабатывать под каждый интернет-магазин дополнительный модуль, который будет удовлетворять условиям конкретного магазина совсем не выход.

В итоге, с каждым реализованным интернет-магазином, модуль 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/

0
11 Декабря 2014, 15:01
408 _deleted_3281:

Как установить Абрикос на Windows 8?  По инструкции https://github.com/abricos/abricos/ выходит ошибка: 

$ mk install
File not found or syntax error in JSON file: undefined

409 roosit:

mk не может найти файл проекта multik.json

Необходимо выполнить эту команду в папке проекта.

p.s. на форуме мы обсуждали процесс установки официальной сборки, а так же создание своего проекта сайта. Посмотрите последнии две темы, там есть информация по этому поводу.