Skip to content
ms3Favorites
ms3Favorites
Списки избранного для MiniShop3 и других ресурсов — хранение в браузере, синхронизация в БД
  1. Компоненты
  2. ms3Favorites
  3. Подключение на сайте

Подключение на сайте

Подробное описание подключения лексикона, стилей и скриптов — в Быстром старте. Ниже — коннектор, кастомизация и чанки.

Проверка интеграции

Для гостей при пустой БД данные берутся из localStorage/cookie. Для авторизованных и гостей (при guest_db_enabled) — из БД по user_id или session_id.

Чек-лист: лексикон и favorites.js подключены на каждой странице товара; кнопка имеет data-favorites-toggle и data-id; ms3favorites.guest_db_enabled = Да; для авторизованных — пользователь авторизован в контексте web.

Коннектор (AJAX)

URL: assets/components/ms3favorites/connector.php

Метод: POST.

Действия:

  • Вывод списка избранного — параметры ids (обязательно), опционально limit, tpl, emptyTpl, list, resource_type
  • sync — синхронизация списков в БД (JSON). POST lists (JSON) или ids
  • create_share — создание публичной ссылки (JSON). POST list. Только авторизованные
  • get_share — получение данных по токену (JSON). POST token
  • copy_share — копирование чужого списка в свой (JSON). POST token, target_list
  • update_comment — обновление заметки к элементу (JSON). POST product_id, list, comment. При comments_enabled
  • add_to_cart — добавление товаров в корзину (JSON). POST ids или product_id
  • get_popularity — маппинг id→count (JSON). POST ids, resource_type
  • clear — очистка списка (JSON). POST list, resource_type

Ответ: HTML списка; при отсутствии товаров — emptyTpl. Для действий (actions) — JSON. Если заданы window.MODX_ASSETS_URL или window.MODX_BASE_URL, JS сам формирует URL коннектора.

Чанки

ЧанкНазначение
tplFavoritesItemКарточка товара в списке «Избранное»
tplFavoritesEmptyПустое состояние (при отсутствии товаров)
tplFavoritesPageСтраница /wishlist/ (обёртка с табами, кнопками корзины)
tplFavoritesPageItemЭлемент для страницы /wishlist/ (checkbox, заметка, кнопка удаления)
tplFavoritesPageDemoDemo: табы + кнопки Каталог/Очистить/Поделиться, ?list=
tplFavoritesListSelectorDropdown выбора списка (default, gifts, plans)
tplFavoritesSharePageСтраница шаринга (обёртка)
tplMs3fBtnКнопка добавления/удаления в избранное (сниппет ms3FavoritesBtn)
tplMs3fBtnWishlistBoxКнопка под шаблон: li.wishlist, box-icon, icon-heart, tooltip
tplMs3fCounterСчётчик избранного (сниппет ms3FavoritesCounter)
tplMs3fListsRowСтрока списка избранного (сниппет ms3FavoritesLists)
tplMs3fListsWrapperОбёртка для списка списков (+output)

data-атрибуты (страница /wishlist/)

АтрибутЭлементНазначение
data-favorites-add-allbuttonДобавить все товары текущего списка в корзину
data-favorites-add-selectedbuttonДобавить выбранные (по checkbox) в корзину
data-favorites-cart-checkboxinput[checkbox]Отметка товара для «Добавить выбранные»
data-favorites-select-allinput[checkbox]Выбрать/снять все checkbox
data-favorites-clearbuttonОчистить текущий список
data-favorites-list-selectorselectDropdown выбора списка (чанк tplFavoritesListSelector)
data-favorites-commenttextareaЗаметка к элементу (при comments_enabled)

Чанки можно переопределять своими (Fenom или MODX); параметры tpl и emptyTpl задаются в сниппете и при вызове render() в JS.

Стили и BEM

Классы с префиксом ms3f (BEM): ms3f__list, ms3f__item и др. Файл стилей: assets/components/ms3favorites/css/favorites.css. Карточки по умолчанию используют Bootstrap (ms3-product-card, product-image-wrapper); для корректного отображения подключите Bootstrap и при необходимости стили каталога.

На мобильных устройствах — горизонтальный скролл списка (.ms3f__list).

CSS-переменные

Переопределяйте в своей теме (:root или контейнер блока):

ПеременнаяОписание
--ms3f-bgФон карточки
--ms3f-borderГраница
--ms3f-radiusСкругление
--ms3f-colorЦвет текста
--ms3f-price-colorЦвет цены
--ms3f-button-activeЦвет активной кнопки (товар в списке)
--toast-bgФон toast-уведомления
--toast-colorТекст toast
--toast-radiusСкругление toast

Пример:

css
:root {
  --ms3f-bg: #fff;
  --ms3f-border: #eee;
  --ms3f-radius: 0.5rem;
  --ms3f-color: #333;
  --ms3f-price-color: #e74c3c;
  --ms3f-button-active: #e74c3c;
}

JavaScript API

javascript
window.ms3Favorites = {
  getList(name),        // Получить ID списка
  getAllLists(),        // Все списки {default:[], gifts:[]}
  add(id, list),        // Добавить товар в список
  remove(id, list),     // Удалить из списка
  switchList(name),     // Переключить активный список
  render(selector, options),  // options: list, tpl, emptyTpl, limit
  updateCounter(), updateButtonStates(),
  sync(),               // Синхронизация (POST lists)
  createShare(list),    // Создать share-ссылку → token (только авторизованные)
  copyFromShare(token), // Скопировать чужой список (target_list опционально)
  addToCart(ids),       // Добавить товары в корзину MiniShop3
  addSelectedToCart(),  // Добавить выбранные (checkbox)
  updateComment(productId, list, comment),  // Сохранить заметку (до 500 символов)
  clear(list)           // Очистить список (action=clear)
};

Интеграция mxQuickView и mFilter

mxQuickView: ms3Favorites подписывается на события mxqv:loaded и mxqv:open. После загрузки контента в модальное окно вызывается updateButtonStates() — кнопки избранного работают без дополнительной настройки.

mFilter: При наличии контейнера результатов ([data-mfilter-results], .mfilter-results или [data-mfilter-id]) ms3Favorites использует MutationObserver и вызывает updateButtonStates() при обновлении DOM. Для кастомного селектора задайте window.ms3fConfig.mfilterContainer до загрузки favorites.js.