Вывод в теме и переменные
Обновлено
Автоматический вывод и хелпер
На вкладке Магазин → Плагины → Регионы → Виджет настройка «Вывод виджета» предлагает «Через хук (автоматически)» и «Вручную по хелперу».
Автоматический режим выводит виджет через 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_* и автоматического переноса полей другого плагина регионов нет.