Примеры: Аксессуары

Внимание! Мы рекомендуем вам прочитать разделы Архитектура, Класс ElementItem, Класс ElementCollection для полного понимания архитектуры проекта.

Пример 1: аксессуары на странице продукта

1.1 Задача

Создайте простую страницу продукта и визуализируйте блок с 5 случайными аксессуарами.

Блок с аксессуарами может выглядеть как любой блок со списком товаров. Блок может быть простым (например: слайдер с 5 случайными аксессуарами). Блок может быть сложным (содержать поиск, фильтрацию, сортировку, разбиение на страницы).

1.2 Как это сделать?

Аксессуары доступны с плагином Accessories for Shopaholic.

1.3 Исходный код

Простой пример страницы товара.

File: pages/product-page.htm

                            
                            
    title = "Product page"
    url = "/product/:slug"
    layout = "main"
    is_hidden = 0
    
    [ProductPage]
    slug = "{{ :slug }}"
    slug_required = 1
    smart_url_check = 1
    skip_error = 0
    ==
    {# Get product item #}
    {% set obProduct = ProductPage.get() %}
    
    <div data-id="{{ obProduct.id }}" itemscope itemtype="http://schema.org/Product">
        <h1 itemprop="name">{{ obProduct.name }}</h1>
    </div>
    
    {# Get accessories + apply filder by "active" field #}
    {% set obProductList = obProduct.accessory.active() %}
    {% set arProductList = obProductList.random(5) %}
    {% if arProductList is not empty %}
        <div>
            <span>Accessories</span>
            {# Render product list #}
            <ul>
                {% for obProduct in arProductList %}
                    <li>{% partial 'product/product-card/product-card' obProduct=obProduct %}</li>
                {% endfor %}
            </ul>
        </div>
    {% endif %}

Файл: partials/product/product-card/product-card.htm

                            
                        
    {# @var obProduct \Lovata\Shopaholic\Classes\Item\ProductItem #}
<a href="{{ obProduct.getPageUrl('product-page') }}">
    <div itemscope itemtype="http://schema.org/Product">
        {% if obProduct.preview_image is not empty %}
            <img
                src="{{ obProduct.preview_image.path }}"
                itemprop="image"
                alt="{{ obProduct.preview_image.description }}"
                title="{{ obProduct.preview_image.title }}"
            >
        {% endif %}
        <h3 itemprop="name">{{ obProduct.name }}
        {% if obProduct.preview_text is not empty %}
            <div itemprop="description">
                {{ obProduct.preview_text }}
            </div>
        {% endif %}
    </div>
</a>