Тема 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 ... *}.