Продвинутые функции

Подмена настроек темы дизайна

Тема Seller 2.0 позволяет динамически подменять настройки темы в зависимости от условий: категории, витрины, страницы и других параметров. Это позволяет, например, менять отображение товаров для определенных категорий.

Система настроек

Все настройки темы описаны в файле theme.xml темы дизайна (в приложении Сайт) и организованы по разделам.

Разделы настроек

Ключи настроек начинаются с префикса раздела:

РазделПрефиксОписание
commoncommon__Общие настройки (дизайн, шрифты, цвета)
headerheader__Настройки шапки сайта
footerfooter__Настройки подвала
homehome__Блоки главной страницы (самый большой раздел)
catalogcatalog__Настройки каталога и категорий
productproduct__Настройки карточки товара
personalpersonal__Настройки личного кабинета
sidebarsidebar__Сайдбар: сортировка блоков (Helpdesk, Hub) и навигация
pagespages__Настройки страниц
cartcart__Настройки корзины и оформления заказа
appsapps__Настройки интеграции с приложениями
mediamedia__Медиа-блоки (баннеры, всплывающие окна)
mobilemobile__Настройки мобильной версии
otherother__Прочие настройки

Доступ к настройкам

В 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)}

Как это работает

  1. Тема перед рендерингом страницы проверяет наличие блока theme.themesettings_return
  2. Блок получает текущие настройки через $wa->globals('theme.event_args')
  3. В блоке можно изменить любые настройки в массиве $theme_settings
  4. Измененные настройки возвращаются через $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_jsontextJSON-структура (простая)
_type_json_treetextJSON-структура (древовидная)
_type_json_grouped_elementstextJSON-структура (группированные элементы, например состав секций шапки)
_type_buttonsradio (в отдельных настройках — select или image_select)Выбор с кнопками
_type_selecttextВыбор из списка
_type_ace_editortextКод-редактор
_type_wysiwygtextWYSIWYG-редактор
_type_numbertextЧисловое значение

Суффикс отражает соглашение об именовании, а не жёсткую привязку к control_type — точный тип смотрите в theme.xml.