Подмена настроек темы дизайна
Тема Seller 2.0 позволяет динамически подменять настройки темы в зависимости от условий: категории, витрины, страницы и других параметров. Это позволяет, например, менять отображение товаров для определенных категорий.
Система настроек
Все настройки темы описаны в файле theme.xml темы дизайна (в приложении Сайт) и организованы по разделам.
Разделы настроек
Ключи настроек начинаются с префикса раздела:
| Раздел | Префикс | Описание |
|---|---|---|
| common | common__ | Общие настройки (дизайн, шрифты, цвета) |
| header | header__ | Настройки шапки сайта |
| footer | footer__ | Настройки подвала |
| home | home__ | Блоки главной страницы (самый большой раздел) |
| catalog | catalog__ | Настройки каталога и категорий |
| product | product__ | Настройки карточки товара |
| personal | personal__ | Настройки личного кабинета |
| sidebar | sidebar__ | Сайдбар: сортировка блоков (Helpdesk, Hub) и навигация |
| pages | pages__ | Настройки страниц |
| cart | cart__ | Настройки корзины и оформления заказа |
| apps | apps__ | Настройки интеграции с приложениями |
| media | media__ | Медиа-блоки (баннеры, всплывающие окна) |
| mobile | mobile__ | Настройки мобильной версии |
| other | other__ | Прочие настройки |
Доступ к настройкам
В Smarty-шаблонах настройки доступны через массив $theme_settings:
{$theme_settings["common__design_font_family"]}
{$theme_settings["catalog__subcategories_display_type"]}
В JavaScript настройки доступны через window.waTheme.themesettings:
window.waTheme?.themesettings?.settings?.common__design_font_family?.value
Подмена настроек через блок
Для подмены настроек создайте в приложении Сайт — Блоки блок с id theme.themesettings_return.
Пример: изменение отображения подкатегорий для конкретной категории
{* GET THEME ID *}
{$_theme_id = waRequest::getTheme()}
{* GET THEME SETTINGS *}
{$args = $wa->globals('theme.event_args')}
{$theme_settings = $args['theme_settings']}
{* SET THEME SETTINGS *}
{if !empty($category) && $category["id"] == 193}
{$theme_settings["catalog__subcategories_display_type"] = "assets/img/themesettings/blocks/categories/types/categories_01.webp"}
{/if}
{* RETURN THEME SETTINGS *}
{$args['theme_settings'] = $theme_settings}
{$wa->globals('theme.event_return', $args)}
Как это работает
- Тема перед рендерингом страницы проверяет наличие блока
theme.themesettings_return - Блок получает текущие настройки через
$wa->globals('theme.event_args') - В блоке можно изменить любые настройки в массиве
$theme_settings - Измененные настройки возвращаются через
$wa->globals('theme.event_return', $args)
Примеры подмены
Изменение количества товаров в строке для категории (доступные значения — four (4 колонки) и third (3 колонки)):
{if !empty($category) && $category["id"] == 10}
{$theme_settings["catalog__categories_category_view_grid_type_buttons"] = "four"}
{/if}
Изменение вида отображения товаров (значения: grid, list, table):
{if !empty($category) && in_array($category["id"], [5, 10, 15])}
{$theme_settings["catalog__categories_category_view_type_buttons"] = "list"}
{/if}
Изменение настройки для конкретной витрины:
{$route = wa()->getRouting()->getRoute()}
{if $route['url'] == 'shop-two/'}
{$theme_settings["header__blocks_catalog_type"] = "assets/img/themesettings/header/catalog/types/catalog_02.webp"}
{/if}
Обратите внимание: у настроек типа image select (выбор картинкой) значением является путь к изображению варианта, например assets/img/themesettings/blocks/categories/types/categories_01.webp.
Именование настроек
Ключи настроек формируются по следующей схеме:
{раздел}__{секция}_{название}[_type_{тип_контрола}]
Примеры:
common__design_elements_rounded_type_buttons— скругление элементов (radio)apps__shop_common_notification_cart_type_buttons— уведомления корзины (radio)home__products_01_title— заголовок блока товаров на главнойhome__advantages_01_advantages_type_json— JSON-данные блока преимуществ
Типы контролов (суффиксы)
| Суффикс | control_type в theme.xml | Описание |
|---|---|---|
_type_json | text | JSON-структура (простая) |
_type_json_tree | text | JSON-структура (древовидная) |
_type_json_grouped_elements | text | JSON-структура (группированные элементы, например состав секций шапки) |
_type_buttons | radio (в отдельных настройках — select или image_select) | Выбор с кнопками |
_type_select | text | Выбор из списка |
_type_ace_editor | text | Код-редактор |
_type_wysiwyg | text | WYSIWYG-редактор |
_type_number | text | Числовое значение |
Суффикс отражает соглашение об именовании, а не жёсткую привязку к control_type — точный тип смотрите в theme.xml.