К содержимому
Вывод в теме

Вывод в теме и переменные

Обновлено

Автоматический вывод и хелпер

На вкладке Магазин → Плагины → Регионы → Виджет настройка «Вывод виджета» предлагает «Через хук (автоматически)» и «Вручную по хелперу».

Автоматический режим выводит виджет через frontend_header. Тема должна выводить этот хук и frontend_head, через который подключаются стили, скрипт и конфигурация плагина.

Для ручного режима вставьте в нужное место шаблона темы:

{if !empty($wa->shop->easyregionsPlugin->version())}
    {$wa->shop->easyregionsPlugin->getWidget()}
{/if}

Первый вызов выводит кнопку и окно, повторные вызовы на этой же странице — только кнопку, открывающую первое окно. HTML виджета не нужно пропускать через |escape.

После первого getWidget() можно добавить свою ссылку открытия:

{if !empty($wa->shop->easyregionsPlugin->version())}
    <a href="#" data-easyregions-open>
        {$wa->shop->easyregionsPlugin->name()|default:'Выбрать город'|escape}
    </a>
{/if}

Одна такая ссылка не создаёт окно. На странице должен присутствовать полный виджет.

Все методы хелпера

Класс shopEasyregionsPluginViewHelper объявляет шесть публичных методов. version() используется как унаследованная проверка доступности плагина.

Метод Результат
getWidget() HTML виджета; пустая строка, если нет доступных регионов
getCurrentRegion() Массив текущего региона или null
name() Название текущего региона или пустая строка
getRegions() Массив регионов, доступных текущей витрине, в настроенном порядке
var($key, $default = '') Значение переменной текущего региона; при отсутствии — переданный запасной результат
vars() Все заданные переменные текущего региона в виде ключ => значение; без региона — пустой массив

Пример всех вызовов для Smarty-шаблона:

{if !empty($wa->shop->easyregionsPlugin->version())}
    {$wa->shop->easyregionsPlugin->getWidget()}
    <p>Город: {$wa->shop->easyregionsPlugin->name()|escape}</p>
    <p>{$wa->shop->easyregionsPlugin->var('phone', 'Телефон не указан')|escape}</p>

    {$vars = $wa->shop->easyregionsPlugin->vars()}
    {foreach $vars as $key => $value}
        <p>{$key|escape}: {$value|escape}</p>
    {/foreach}

    {$region = $wa->shop->easyregionsPlugin->getCurrentRegion()}
    {if $region}
        <span data-stock="{$region.stock_id|escape}">{$region.name|escape}</span>
    {/if}

    {$regions = $wa->shop->easyregionsPlugin->getRegions()}
    {foreach $regions as $item}
        <span>{$item.name|escape}</span>
    {/foreach}
{/if}

Массив региона содержит id, name, строковый stock_id, is_default, sort, а также JSON-строки public_stocks и storefronts. Это не тот же формат, что у ответа MCP: там списки уже разобраны в массивы. Методы getCurrentRegion() и getRegions() сами не выполняют IP-определение.

Создание переменных

Откройте Магазин → Плагины → Регионы → Переменные, заполните «Ключ» и «Название», нажмите «Добавить поле». Для ключа используйте строчные латинские буквы, цифры и _, начиная с буквы, до 64 символов. Например, phone, address, opening_hours.

Затем откройте Магазин → Плагины → Регионы → Регионы и заполните значения в разделе «Переменные региона» каждой карточки. Готовые вызовы доступны на вкладке «Как подключить».

Ключи city и zip, если вы их создадите, используются также как запасные город и индекс для адреса заказа. Это ваши переменные, автоматически созданного набора обязательных полей нет. При удалении переменной удаляются её значения во всех регионах.

Свои шаблоны

Скопируйте нужный исходник из templates/actions/frontend/ плагина в корень активной темы магазина текущей витрины. Плагин учитывает используемую мобильную тему.

Файл в теме Исходник Назначение
easyregions_plugin.widget.html widget.html Весь виджет с подключением кнопки и окна
easyregions_plugin.button.html button.html Кнопка города
easyregions_plugin.window.html window.html Списки, окно, подложки и предложение первого визита

В шаблонах доступны $easyregions_region, $easyregions_copy, $easyregions_button_template, $easyregions_window_template, $easyregions_window_title, $easyregions_window_subtitle, $easyregions_popup_style. Последняя переменная содержит dropdown или modal. При повторном выводе кнопки $easyregions_copy включён; не создавайте для неё ещё одно окно.

Классы для JavaScript

Сохраняйте классы из исходных шаблонов. Скрипт ищет элементы по js-easyregions-*, а не только по ID.

Элементы Классы
Корень, кнопка, название js-easyregions-widget, js-easyregions-trigger, js-easyregions-region-name
Выпадающий список js-easyregions-dropdown, js-easyregions-region-list, js-easyregions-search, js-easyregions-dadata-results
Окно и подложки js-easyregions-sheet, js-easyregions-overlay, js-easyregions-sheet-backdrop, js-easyregions-sheet-close
Содержимое окна js-easyregions-sheet-list, js-easyregions-sheet-search, js-easyregions-sheet-dadata, js-easyregions-sheet-empty
Блоки поиска js-easyregions-search-box
Заголовки js-easyregions-picker-header-dropdown, js-easyregions-picker-header-sheet
Подсказка первого визита js-easyregions-notifier, js-easyregions-notifier-text, js-easyregions-notifier-actions
Создаваемые скриптом пункты js-easyregions-item с data-id; js-easyregions-dadata-item с данными подсказки

Сохраняйте и обычные классы: например, easyregions-sheet__list определяет сортировку и разметку списка окна. Состояния оформляются через is-open, is-visible, is-modal, is-active, easyregions-sheet-open. Исходные ID сохраняйте уникальными.

Скрипт переносит окно и подложки в body; на мобильных устройствах туда может переноситься и подсказка. При собственном CSS не рассчитывайте, что они всегда остаются потомками шапки или корня виджета.

После выбора плагин вызывает на document событие easyregions__region_changed. Его данные: region_id, region_name, строковый stock_id, codes, region_code, location. По умолчанию после события страница перезагружается. Разработчик может отменить перезагрузку через event.preventDefault(), только если самостоятельно обновляет зависящие от региона каталог, корзину и оформление.

Страницы, описания и мета-теги

Текст страниц

На страницах магазина и приложения «Сайт» на том же домене можно использовать хелпер:

Город: {$wa->shop->easyregionsPlugin->name()|escape}
Телефон: {$wa->shop->easyregionsPlugin->var('phone')|escape}

Это вызовы Smarty при обработке текста страниц. В магазине регион должен соответствовать точной витрине. В приложении «Сайт» достаточно привязки региона к одной из витрин на текущем домене; регион без ограничений витрин тоже подходит.

Описания категорий и товаров

Плагин подставляет значения в description через хуки frontend_category и frontend_product, когда штатное выполнение Smarty в магазине выключено. Он распознаёт только:

{$wa->shop->easyregionsPlugin->name()}
{$wa->shop->easyregionsPlugin->var('phone')}
{$wa->shop->easyregionsPlugin->var("address")|escape}

Допустимы одинарные и двойные кавычки, а также необязательный |escape. Ключ соответствует формату [a-z][a-z0-9_]{0,63}. Запасной аргумент var(), условия, циклы, vars() и прочие выражения этой ограниченной подстановкой не вычисляются и остаются текстом. Если штатное выполнение Smarty включено, обработка описания остаётся за Shop-Script.

Мета-теги магазина

В title, description, keywords используйте те же простые вызовы:

Магазин в городе {$wa->shop->easyregionsPlugin->name()}
{$wa->shop->easyregionsPlugin->var('phone')}

В frontend_head плагин обрабатывает уже сформированные заголовок и мета-значения ответа магазина. Поэтому подстановка работает для соответствующих значений витрины и страниц магазина, дошедших до ответа. Полный Smarty в мета-тегах не выполняется: поддерживаются только name() и var('ключ') с указанным выше синтаксисом. Без значения подставляется пустая строка.

В мета-тегах значения остаются исходным текстом; экранирование при выводе должна выполнять тема. Подстановка плагина не обрабатывает мета-теги приложения «Сайт». Глобальных переменных вида region_* и автоматического переноса полей другого плагина регионов нет.