К содержимому
API

События и API темы дизайна

Обновлено

Тема Seller 2.0 предоставляет три механизма расширения: JavaScript API-модули, собственные JS-события и Smarty-хуки для плагинов. Все API доступны через глобальный объект window.waTheme.

Доступные API-модули

Модуль Глобальный доступ Описание
Cart API window.waTheme.cartAPI Работа с корзиной
Wishlist API window.waTheme.wishlistAPI Работа с избранным
Compare API window.waTheme.compareAPI Работа со сравнением
Управление товарами window.waTheme.initProducts, window.waTheme.initProductsInContainer, экземпляры — element._productInstance Количество, SKU, характеристики, услуги
Notification API window.waTheme.notificationAPI Уведомления
Offcanvas API window.waTheme.offcanvasAPI Выезжающие панели

Подробная документация по каждому модулю — в соответствующих разделах.

События JavaScript

Тема генерирует собственные события (CustomEvent), на которые можно подписаться из своего кода — например, для отслеживания целей Яндекс.Метрики. События корзины, избранного, сравнения, ленивой подгрузки и обновления списка товаров в категории отправляются на document; события товара — на элементе товара с bubbles: true, поэтому их тоже можно ловить на document.

Событие Когда срабатывает Основные поля event.detail
cart:changed Изменение корзины action (added, removed, updated, cleared), itemInfo, quantity, count
wishlist:changed Изменение избранного action (added, removed, cleared), productId, count, wishlist
compare:changed Изменение списка сравнения action (added, removed, cleared), productId, count, compareList
product:sku-changed Переключение артикула товара sku, productId, productData
product:service-changed Включение/выключение услуги serviceId, isEnabled, productId, servicesPrice
product:service-variant-changed Выбор варианта услуги serviceId, variantId, variantPrice, productId, servicesPrice
lazyload:items-loaded Ленивая подгрузка списка товаров newItems, container, wrapper
category-views:products-updated Смена вида списка товаров в категории newItems, container, source
category-sorting:products-updated Смена сортировки в категории newItems, container, source
category-filters:products-updated Применение фильтров в категории source

Пример: цели Яндекс.Метрики

Код можно разместить в блоке site.{имя_темы}_js (Сайт — Блоки) — он подключается перед закрывающим тегом </body>:

{literal}
<script>
document.addEventListener('cart:changed', (event) => {
    if (event.detail.action === 'added') {
        // добавление товара в корзину
        // 00000000 - номер счетчика, addToCart - цель
        ym(00000000, 'reachGoal', 'addToCart');
    }
});

document.addEventListener('wishlist:changed', (event) => {
    if (event.detail.action === 'added') {
        // добавление товара в избранное
    }
});

document.addEventListener('compare:changed', (event) => {
    if (event.detail.action === 'added') {
        // добавление товара в сравнение
    }
});
</script>
{/literal}

Встроенные цели Метрики без кода

Для типовых целей писать JavaScript не обязательно: в настройках темы есть группа «Цели Яндекс.Метрики». Укажите «Номер счётчика Яндекс.Метрики» и идентификаторы целей в полях:

  • «Добавление товара в корзину»

  • «Добавление товара к сравнению»

  • «Добавление товара в избранное»

  • «Начало оформления заказа»

  • «Успешное оформление заказа»

Тема отправит эти цели самостоятельно.

Кроме собственных событий, тема использует события компонентов Preline UI (open.hs.overlay, close.hs.overlay и другие) — они описаны в статье «События Preline».

Хуки темы дизайна (Smarty)

Хуки позволяют плагинам добавлять свой функционал в различные части интерфейса темы. В шаблонах места вывода помечены аннотациями вида {* @event имя_хука.%plugin_id% *}. Ниже перечислены все доступные хуки по приложениям; в именах хуков * — идентификатор плагина.

Обратите внимание: основные шаблоны (head.html, header.html, footer.html и т.д.) лежат в корне темы соответствующего приложения, а не в папке html/.

Shop (Магазин) — 18 хуков

Общие элементы страницы

Хук Расположение Описание
frontend_head head.html Хук в секции <head> для добавления meta-тегов, скриптов, стилей
frontend_header header.html Хук в шапке сайта
frontend_footer footer.html Хук в подвале сайта
frontend_nav sidebar.html Хук в боковой навигации

Главная страница

Хук Расположение Описание
frontend_homepage home.html Хук на главной странице магазина

Категории и поиск

Хук Расположение Описание
frontend_category category.html Хук на странице категории товаров
frontend_search search.html, html/search/wsearch.html, html/search/search-pro-plugin.html Хук на странице поиска

Карточка товара

Хук Расположение Описание
frontend_product.*.menu html/product/product_01.html … product_03.html Хук в меню товара
frontend_product.*.block html/product/product_01.html … product_03.html Хук в основном блоке товара
frontend_product.*.block_aux html/product/product_01.html … product_03.html Хук в дополнительном блоке товара
frontend_product.*.cart html/product/blocks/prices.html, html/product/blocks/price-card.html Хук у блока цены/кнопки корзины

Корзина и оформление заказа

Хук Расположение Описание
frontend_cart cart.html Хук на странице корзины
frontend_checkout checkout.contactinfo.html, checkout.shipping.html, checkout.payment.html, checkout.confirmation.html, checkout.success.html, checkout.error.html Хук на шагах оформления заказа и страницах успеха/ошибки

Заказы

Хук Расположение Описание
frontend_order order.html Хук на странице просмотра заказа

Личный кабинет

Хук Расположение Описание
frontend_my_nav my.nav.html Хук в навигации личного кабинета
frontend_my_orders my.orders.html Хук на странице списка заказов
frontend_my_order my.order.html Хук на странице конкретного заказа
frontend_my_affiliate my.affiliate.html Хук на странице партнерской программы

Blog (Блог) — 10 хуков

Общие элементы

Хук Расположение Описание
frontend_action_<тип>.*.head head.html Хук в секции <head> для страниц блога
frontend_action_<тип>.*.nav_before main.html Хук перед навигацией блога
frontend_action_<тип>.*.sidebar sidebar.html Хук в боковой панели блога

Вместо <тип> подставляется тип страницы: default, post, page, error.

Посты

Хук Расположение Описание
prepare_posts_frontend.*.post_title post.html Хук в области заголовка поста
prepare_posts_frontend.*.before post.html Хук перед контентом поста
prepare_posts_frontend.*.after post.html Хук после контента поста
frontend_post.*.footer post.html Хук в подвале поста

Комментарии

Хук Расположение Описание
prepare_comments_frontend.*.authorname_suffix comment.html Хук после имени автора комментария
prepare_comments_frontend.*.before comment.html Хук перед текстом комментария
prepare_comments_frontend.*.after comment.html Хук после текста комментария

Photos (Фотогалерея) — 10 хуков

Общие элементы

Хук Расположение Описание
frontend_assets head.html Хук для добавления ассетов (стили, скрипты)
frontend_layout.*.header main.html Хук в шапке приложения Photos

Коллекции и альбомы

Хук Расположение Описание
frontend_collection.*.name album.html Хук в области названия коллекции
frontend_collection.*.content album.html Хук в контентной области коллекции
frontend_collection.*.search_name search.html Хук в названии результатов поиска

Страница фотографии

Хук Расположение Описание
frontend_photo.*.top_left photo.html Хук в левом верхнем углу страницы фото
frontend_photo.*.top_right photo.html Хук в правом верхнем углу страницы фото
frontend_photo.*.sidebar photo.html Хук в боковой панели страницы фото
frontend_photo.*.content photo.html Хук в контентной области страницы фото
frontend_photo.*.bottom photo.html Хук внизу страницы фото

Hub — 17 хуков

Общие элементы

Хук Расположение Описание
frontend_head head.html Хук в секции <head>
frontend_header main.html Хук в шапке приложения
frontend_footer footer.html Хук в подвале
frontend_nav sidebar.html Хук в боковой навигации
frontend_homepage home.html Хук на главной странице

Списки и поиск

Хук Расположение Описание
frontend_category category.html Хук на странице категории
frontend_search search.html Хук на странице поиска
frontend_tag tag.html Хук на странице тега
frontend_author author.html Хук на странице автора

Топики

Хук Расположение Описание
frontend_topic.*.title_suffix topic.html Хук после заголовка топика
frontend_topic.*.body topic.page.html, topic.question.html, topic.forum.html, topic.feedback.html Хук в теле топика (для всех типов топиков)
frontend_topic.*.comments comments.html Хук в области комментариев топика
frontend_comments comment.html Хук в комментарии

Создание и редактирование топика

Хук Расположение Описание
frontend_topic_add.*.top_block add.html Хук вверху формы создания топика
frontend_topic_add.*.bottom_block add.html Хук внизу формы создания топика
frontend_topic_edit.*.top_block add.html Хук вверху формы редактирования топика
frontend_topic_edit.*.bottom_block add.html Хук внизу формы редактирования топика

Другие приложения

Приложение Хук Расположение Описание
Mailer frontend_my_nav my.nav.html Хук в навигации личного кабинета (рассылки)
Helpdesk frontend_my_nav my.nav.html Хук в навигации личного кабинета (тикеты)

Хуки в блоках конструктора (Site)

Блоки конструктора темы в приложении «Сайт» также содержат хуки:

Хук Расположение Описание
prepare_photos_frontend.top_left.* html/blocks/photos/photos_01.html Хук в левом верхнем углу фото в блоке фотографий
prepare_photos_frontend.top_right.* html/blocks/photos/photos_01.html Хук в правом верхнем углу фото в блоке фотографий
prepare_posts_frontend.*.post_title html/blocks/basic/cards-image/*.html Хук в заголовке карточки поста
prepare_posts_frontend.*.before html/blocks/basic/cards-image/*.html Хук перед контентом карточки поста
prepare_posts_frontend.*.after html/blocks/basic/cards-image/*.html Хук после контента карточки поста

Как читать таблицы

  • Хуки frontend_* тема вызывает при рендеринге шаблона, prepare_* — при подготовке данных.

  • Набор хуков меняется вместе с шаблонами: сверяйтесь с актуальной версией темы. Все места вывода помечены в шаблонах аннотациями {* @event ... *}.