Пользовательские блоки
Обновлено
Тема Seller 2.0 использует блочную архитектуру для построения страниц. Через панель управления темой можно управлять блоками на главной странице, в сайдбаре, карточке товара и других местах.
Блоки главной страницы
Состав и порядок блоков главной страницы задаётся в настройке «Блоки» (раздел «Сортировка блоков», ключ home__items_type_json). Каждый блок имеет собственную группу настроек с префиксом home__ и один или несколько вариантов отображения (типов).
Блоки с настройками в панели темы
| Блок | id в сортировке | Варианты отображения |
|---|---|---|
| Большие баннеры (слайдер) | home__slider |
slider_01 — slider_04 |
| Категории | home__categories |
categories_01 — categories_03 |
| Товары #1—#3 | home__products_01 — home__products_03 |
grid (плитка), swiper (слайдер) |
| Промо-баннеры #1—#3 | home__banners_01 — home__banners_03 |
banners_01 — banners_05 |
| Бренды | home__brands |
brands_01 — brands_02 |
| Записи блога #1—#2 | home__posts_01 — home__posts_02 |
posts_01 — posts_05 |
| Преимущества | home__advantages_01 |
advantages_01 — advantages_02 |
| О компании | home__about |
about_01 — about_03 |
| Фотоальбомы | home__albums |
albums_01 — albums_03 |
| Фотографии | home__photos |
photos_01 |
| Отзывы о товарах | home__products_reviews |
reviews_01 |
| Отзывы из приложения Easyreviews | home__easyreviews |
easyreviews_01 |
| Посты из ВКонтакте | home__ewshopvkposts |
ewshopvkposts_01 |
| Посты из Telegram | home__ewshoptgposts |
ewshoptgposts_01 |
| Видео из ВКонтакте | home__ewshopvkvideos |
ewshopvkvideos_01 |
| Видео из RuTube | home__ewshoprtvideos |
ewshoprtvideos_01 |
| Просмотренные товары | home__viewed_products |
— |
Дополнительные шаблоны блоков
В каталоге html/blocks/ темы есть также блоки без собственных групп настроек в панели — их можно подключать вручную через include_template с параметрами props или как пользовательский блок в сортировке:
| Блок | Каталог | Варианты |
|---|---|---|
| Аккордеон | html/blocks/accordion/ |
accordion_01 |
| Документы | html/blocks/documents/ |
documents_01 |
| FAQ | html/blocks/faq/ |
faq_01 — faq_02 |
| Цены | html/blocks/prices/ |
prices_01 |
| Команда | html/blocks/team/ |
team_01 |
| Видео | html/blocks/videos/ |
videos_01 — videos_03 |
| Базовые карточки | html/blocks/basic/ |
наборы cards-icon, cards-image, cards-text, primitives |
Медиа-блоки
Помимо блоков главной страницы, в теме есть медиа-области (раздел настроек media__):
| Область | Настройки | Описание |
|---|---|---|
| Баннер над шапкой | media__header_above_* |
Полоса с текстом и кнопкой над шапкой сайта |
| Баннер под шапкой | media__header_below_* |
Баннер под шапкой сайта |
| Баннер над подвалом | media__footer_* |
Баннер над подвалом сайта |
| Баннер в сайдбаре | media__sidebar_* |
Баннер в сайдбаре |
| Баннер в категории | media__categories_* |
Баннер на страницах категорий |
| Баннер в личном кабинете | media__my_account_* |
Баннер в личном кабинете покупателя |
| Всплывающий баннер | media__promo_* |
Промо-баннер с задержкой показа и cookie: на десктопе — в углу экрана (нижний левый/правый), на мобильных — offcanvas-панель снизу |
| Всплывающее окно при уходе с сайта | media__modal_leave_* |
Окно, показываемое при попытке покинуть сайт |
Архитектура блоков
Все блоки следуют единой архитектуре:
- Централизация — блоки хранятся в директории
html/blocks/темы - Дефолтные настройки — берутся из
$theme_settings - Переопределение — через параметр
$props - Типизация — разные типы отображения в отдельных файлах
Структура файлов блока
html/blocks/{block_name}/
├── {block_name}.html # Основной файл с логикой
├── {block_name}_01.html # Тип отображения 1
├── {block_name}_02.html # Тип отображения 2
└── ...Основной файл блока ({block_name}.html)
Основной файл отвечает за:
- Сбор дефолтных настроек из
$theme_settings - Переопределение настроек через
$props - Декодирование JSON-данных
- Вывод заголовка через компонент
block-header - Подключение нужного типа отображения
Шаблон основного файла:
{* DEFAULT PROPS *}
{$block_type = $theme_settings["home__block_type"]}
{$default_props = [
"type" => $block_type,
"subtitle" => $theme_settings["home__block_subtitle"]|default:"",
"title" => $theme_settings["home__block_title"]|default:"",
"items" => $theme_settings["home__block_items_type_json"]|default:[],
"container" => true
]}
{* MERGE WITH PASSED PROPS *}
{if !empty($props)}
{foreach $props as $key => $value}
{$default_props[$key] = $value}
{/foreach}
{/if}
{$block_props = $default_props}
{* Декодирование JSON *}
{if is_string($block_props["items"])}
{$items_data = json_decode($block_props["items"], true)}
{else}
{$items_data = $block_props["items"]}
{/if}
{* RENDER *}
{if !empty($items_data)}
<div class="block-name">
{call include_template template="html/components/block-header"
subtext=$block_props["subtitle"]
title=$block_props["title"]
align=$block_props["align"]}
{call include_template template="html/blocks/{block_name}/{$block_props["type"]}"
items_data=$items_data block_props=$block_props}
</div>
{/if}Файлы типов отображения
Файлы типов ({block_name}_01.html, {block_name}_02.html и т.д.) отвечают только за верстку. Они получают готовые данные через переменные:
$items_data— декодированные данные элементов$block_props— все настройки блока
Настройки блоков
Настройки блоков описываются в файле theme.xml темы и доступны в Smarty-шаблонах через $theme_settings:
{$theme_settings["home__block_name_setting"]}Правила именования настроек:
home__— префикс для настроек главной страницы{block_name}_— имя блока{setting_name}— имя настройки_type_{type}— суффикс для специальных типов контролов
Типы контролов (суффиксы):
| Суффикс | Описание |
|---|---|
_type_json |
JSON-структура (простая) |
_type_json_tree |
JSON-структура (древовидная) |
_type_json_grouped_elements |
JSON-структура (группированные элементы) |
_type_buttons |
Выбор с кнопками (radio) |
_type_select |
Выбор из списка |
_type_ace_editor |
Код-редактор |
_type_wysiwyg |
WYSIWYG-редактор |
_type_number |
Числовое значение |
Картинки для выбора типа отображения хранятся в каталоге темы assets/img/themesettings/blocks/{block_name}/types/; в настройках типа image select значением служит путь к такой картинке.
Передача параметров из home.html
Файл home.html перебирает JSON сортировки home__items_type_json и передает в каждый блок объект $item:
{call include_template template=$item["template"]
wrapper_classes=$wrapper_classes item=$item app=$item["app"]}Доступные поля объекта $item:
item["id"]— ID блока (например,home__products_01)item["name"]— название блокаitem["template"]— путь к шаблонуitem["app"]— приложениеitem["fields"]— настраиваемые поля: фон (background), фон тёмной темы (background_dark), разделитель (divider), отступы (spacer_top,spacer_bottom)item["active"]— активен ли блокitem["custom"]— пользовательский блок или нет
Для поддержки множественных блоков с разными настройками используется динамический префикс:
{$settings_prefix = "home__products_01"}
{if !empty($item["id"])}
{$settings_prefix = $item["id"]}
{/if}
{$default_props = [
"title" => $theme_settings["`$settings_prefix`_title"]|default:""
]}Компонент block-header
Универсальный компонент для вывода заголовка блока. Расположен в html/components/block-header.html.
Параметры:
subtext— текст над заголовкомtitle— основной заголовок (поддерживает выделение через[слово])icon— иконка слева от заголовка, напримерlucide/startext— описание под заголовкомalign— выравнивание:left(по умолчанию) илиcenterlink— ссылка в заголовкеlink_text— текст ссылки-кнопки (выводится приalign=center)
Создание пользовательского блока
Через панель управления темой можно создавать новые блоки на главной странице и в других местах.
Параметры блока будут доступны после сохранения настроек темы. В поле Путь к шаблону или id блока (или ID блока) нужно указать id блока из приложения Сайт — Блоки.
Блок в приложении Сайт
Подключение файла из темы дизайна
В поле Путь к шаблону или id блока нужно ввести данные для подключения файла через запятую — путь к файлу (без расширения .html, оно добавляется автоматически) и приложение. Данный функционал работает только для блоков главной страницы.
Пример: html/blocks/advantages/advantages,site
Подключение блока через Smarty
{call include_template template="html/blocks/advantages/advantages"}С параметрами:
{call include_template template="html/blocks/advantages/advantages" props=[
"title" => "Заголовок",
"type" => "advantages_02"
]}Пошаговое создание нового блока
Если вы разрабатываете собственный блок для главной страницы, выполните следующие шаги:
1. Верстка и логика блока
Создайте директорию html/blocks/{block_name}/ и разместите в ней файлы:
{block_name}.html— основной файл, который собирает настройки, обрабатывает props и подключает типы отображения{block_name}_01.html,{block_name}_02.htmlи т.д. — файлы типов отображения (при необходимости)
2. Настройки в theme.xml
Опишите настройки блока в theme.xml темы: группу-разделитель (group_divider) и сами настройки с префиксом home__{block_name}_.... Если используются картинки для выбора типа отображения, разместите их в assets/img/themesettings/blocks/{block_name}/types/.
3. Подключение в сортировку
Добавьте блок в JSON настройки «Блоки» (home__items_type_json) с полями id, name, template, app, fields (background, background_dark, divider, spacer_top, spacer_bottom), active, custom.
4. Данные
Если блок загружает данные (товары, посты и т.п.), в основном файле {block_name}.html:
- Соберите значения из
$theme_settings - Разрешите переопределение через
$props - При отсутствии данных в
$propsзагрузите их из API (shop, blog и т.д.)
5. Поддержка множественных экземпляров (опционально)
Для нескольких независимых экземпляров блока с разными настройками:
- Опишите в
theme.xmlотдельные группы настроек с префиксамиhome__{block_name}_01_*,home__{block_name}_02_* - Определяйте префикс динамически через
$item["id"](передается автоматически изhome.html) - Добавьте каждый экземпляр в сортировку
home__items_type_jsonс разнымиid
6. Проверка
- Включите блок в сортировке и убедитесь, что
include_templateнаходит файл - Проверьте отображение на главной странице
- Проверьте адаптивность на мобильных устройствах
Настройка внешнего вида блоков
Каждый блок на главной странице поддерживает настройки через панель темы:
- Тип отображения — выбор варианта отображения блока
- Заголовок — заголовок блока (поддерживает выделение через
[слово]) - Подзаголовок — подзаголовок блока
- Описание — текстовое описание
- Выравнивание — выравнивание заголовка (left / center)
- Элементов в строке — количество элементов в ряду
- Фон, фон тёмной темы, отступы, разделитель — настраиваются через поля каждого блока в сортировке
Блоки настраиваются через панель темы дизайна и не требуют редактирования исходных файлов.