990
13.03
14.14
за сайт
- Проверено Modstore
- Бесплатные будущие обновления
- Работа на тестовом и публичном домене
- 12 месяцев тех. поддержки
Внимание, этот компонент требует PHP
8.1
или выше!
Внимание, этот компонент требует MODX 3 или выше.
❤️ ms3Favorites — список избранного для MODX Revolution 3 и MiniShop3
Пользователи сохраняют товары и ресурсы в избранное, возвращаются к покупке позже, делятся списком по ссылке и оформляют заказ с страницы /wishlist/. Данные в браузере (localStorage или cookie), синхронизация в БД для авторизованных и гостей (по настройкам). Рост вовлечённости, повторных визитов и конверсии.
Это дополнение для тех, кому нужно:
✨ Ключевые возможности
🛒 MiniShop3
🔒 Надёжность на фронте
🚀 Быстрый старт
📋 Требования
Пользователи сохраняют товары и ресурсы в избранное, возвращаются к покупке позже, делятся списком по ссылке и оформляют заказ с страницы /wishlist/. Данные в браузере (localStorage или cookie), синхронизация в БД для авторизованных и гостей (по настройкам). Рост вовлечённости, повторных визитов и конверсии.
Это дополнение для тех, кому нужно:
- несколько списков (подарки, планы покупок, свои имена) с лимитом через системные настройки
- шаринг уникальной ссылкой /wishlist/share?token=… и копирование чужого списка к себе
- полноценная страница wishlist с табами, toolbar (ms3FavoritesIds → pdoPage → ms3Favorites)
- добавление выбранных позиций или всего списка в корзину MiniShop3 одним действием
- заметки к позициям (комментарии) в карточках, с сохранением локально и в БД
- единый сценарий для разных типов контента через resource_type (товары MS3, ресурсы, статьи и др.)
✨ Ключевые возможности
- Кнопка избранного data-favorites-toggle, счётчик data-favorites-count, выбор списка (tplFavoritesListSelector)
- Уведомления: свой ms3fConfig.notify → ms3Message (MiniShop3) → iziToast (при необходимости подгружается из пакета)
- Сниппеты: ms3Favorites, ms3FavoritesIds, ms3FavoritesPage, ms3FavoritesShare, ms3fLexiconScript
- AJAX-коннектор: sync, шаринг, комментарии, корзина, очистка, популярность. HTML-вывод списка для ms3Favorites.render()
- Интеграция с mxQuickView и mFilter (обновление состояния кнопок после подгрузки контента)
🛒 MiniShop3
- Вывод списка через msProducts и pdoTools
- Действие add_to_cart в коннекторе: чекбоксы и кнопки «в корзину» на странице wishlist
- Совместимость с типичной витриной без навязывания вёрстки магазина
🔒 Надёжность на фронте
- Настраиваемые лимиты, TTL гостей и срок жизни ссылок шаринга
🚀 Быстрый старт
- Установите пакет через Extras → Installer
- Подключите [[!ms3fLexiconScript]], CSS и favorites.js из assets/components/ms3favorites/
- Разметьте кнопки: data-favorites-toggle, data-id, при необходимости data-list и data-resource-type
- Страницу списка выведите сниппетом ms3FavoritesPage: пагинацию и каталог — по интеграции на docs.modx.pro
📋 Требования
- MODX Revolution 3.0.3+
- PHP 8.1+
- MiniShop3 1.0+
- pdoTools 3.x (рекомендуется для вывода списков и Fenom)
Официальная документация:
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.1.0] - 2026-04-03
Added
- JS API
getTotalCount(resourceType?): без аргумента — суммарное число элементов во всех типах и списках; с аргументом (например'products') — сумма по всем спискам указанногоresource_type. Совпадает с логикой счётчика[data-favorites-count]. - События
ms3f:added,ms3f:removed,ms3f:listCleared: вdetailдобавлены поляcountInList,totalByType,totalAllTypes(состояние после сохранения в storage) — для empty state и кастомного UI без ручного обхода данных.
Changed
updateCounter()используетgetTotalCount()внутри.- Лексикон RU/EN: формулировки «желаемое» → «избранное»; в чанках — вызов лексикона через Fenom
{'key' | lexicon}. - favorites.css: hover вторичных кнопок тулбара страницы избранного — рамка и текст
#111(не акцентный красный).
[1.0.1] - 2026-03-27
Changed
- Инлайн-скрипты чанков
tplFavoritesPage,tplFavoritesSharePage: объявленияvarзаменены наconst/let.
Fixed
- Сниппет
ms3fLexiconScript: при повторном разборе вывода через Fenom (pdoTools) объектный JSON после=` воспринимался как тег шаблона (ошибка у `{"empty":). В строке скрипта добавлены пробелы после{и перед}в JSON-объектах и вокруг=` / `||, чтобы Fenom не ломал разметку.
[1.0.0] - 2026-22-03
Added
- Snippet ms3Favorites: вывод списка товаров из Wishlist по ID (MiniShop3 msProducts, pdoTools)
- Snippet ms3fLexiconScript: лексикон и конфиг для фронта (window.ms3fLexicon, window.ms3fConfig)
- Connector (POST): assets/components/ms3favorites/connector.php — HTML списка, action=sync для синхронизации
- JS (wishlist.js): localStorage/cookie, toggle add/remove через data-wishlist-toggle, toast-уведомления
- Счётчик [data-wishlist-count]
- Chunks: tplWishlistItem (карточка с кнопкой удаления), tplWishlistEmpty (empty state с CTA)
- System settings: ms3favorites.max_items, ms3favorites.storage_type
- CSS: BEM ms3f, CSS-переменные, toast, mobile-first
- Sync service: Ms3favoritesSyncService для авторизованных пользователей
- Несколько списков: default, gifts, plans и кастомные; dropdown выбора при добавлении (tplWishlistListSelector); БД: колонка list_name, unique (user_id, product_id, list_name).
- Шаринг списка: уникальная ссылка /wishlist/share?token=xxx; таблица ms3favorites_shares; сниппет ms3FavoritesShare; кнопка [data-wishlist-share]; action=create_share, get_share, copy_share.
- Срок хранения для гостей: настройка ms3favorites.guest_ttl_days; колонки session_id, is_guest; резолвер очищает старые записи при upgrade.
- Страница /wishlist/: сниппет ms3FavoritesPage, чанки tplWishlistPage, tplWishlistPageItem; табы списков, toolbar; серверная пагинация — отдельно pdoPage + ms3Favorites.
- Интеграция с корзиной MiniShop3: action=add_to_cart; кнопки «Добавить все в корзину», «Добавить выбранные»; checkbox [data-wishlist-cart-checkbox].
- Комментарии к позициям: колонка comment в ms3favorites_items; textarea [data-wishlist-comment]; action=update_comment; сохранение в localStorage и БД.
- Новые настройки: guest_ttl_days (30), share_ttl_days (90), max_lists (10).
- Share service: Ms3favoritesShareService; расширен Sync service для list_name.
- Лексиконы: ms3favoriteslist, ms3favoritesshare, ms3favorites_copy_to_my_list, ms3favorites_add_to_cart, ms3favoritescomment*.
- Поддержка любых ресурсов (resource_type): products, resources, articles, pages, custom. Adapter layer (ProductAdapter, ResourceAdapter), AdapterFactory. Сниппеты ms3Favorites, ms3FavoritesPage, ms3fLexiconScript принимают
resource_type. - Режим удаления mode="list":
data-favorites-mode="list", обёртка.ms3f-parent— при удалении скрывается вся карточка, при пустом списке показывается empty state. - Интеграция mxQuickView: подписка на
mxqv:loadedиmxqv:open, вызовupdateButtonStates()после загрузки модалки. - Интеграция mFilter: MutationObserver на контейнер результатов (
[data-mfilter-results],.mfilter-results),ms3fConfig.mfilterContainerдля кастомного селектора. - Плейсхолдер ms3f.total: серверный счётчик для авторизованных. Функция
ms3f_get_total_for_current_user(). - Опция сортировки sortBy:
added_at_desc(по умолчанию) илиadded_at_ascв ms3FavoritesPage. - Раздел «Устранение неполадок» в INTEGRATION.md: порядок скриптов, типичные проблемы, пример условного вывода для гостей.
- Хранение гостей в БД: при sync гости сохраняются по
session_id(user_id=0, is_guest=1). Серверный счётчик ms3f.total и страница /wishlist/ для гостей из БД. Настройка ms3favorites.guest_db_enabled; CLI cleanup_guests.php для cron по TTL. - Чанк tplCatalogRowMs3f и пример «каталог + pdoPage + msProducts + счётчик и кнопка в строке» в INTEGRATION.md §5.2 и QUICK-START.md (аналог типового примера из документации сторонних дополнений избранного).
Changed
- Sync API: теперь передаётся lists (объект {default:[ids], gifts:[ids]}) вместо плоского ids; обратная совместимость при legacy ids.
- localStorage/cookie: структура {lists: {...}, comments: {...}}.
- JS API: add(id, list), remove(id, list), getList(name), getAllLists(), switchList(name), createShare(list), copyFromShare(token), addToCart(ids), updateComment(id, list, comment).
- Sync:
getResourceIds(),saveToDb()сresource_type. - Connector:
resource_typeв sync, render, update_comment, copy_share. - wishlist.js:
_resourceType,resource_typeв sync/render;update_commentиcopyFromShareпередаютresource_type. - Уведомления: вместо встроенного DOM-toast используется iziToast: при отсутствии на странице библиотеки она один раз подгружается из
assets/components/ms3favorites/vendor/izitoast/(URL вms3fConfig.iziToastBaseUrlиз сниппетаms3fLexiconScript). Цепочка: опциональноms3fConfig.notify(возвратtrue— полностью своё UI) →window.ms3Message.show(MiniShop3) → глобальныйiziToast→ ленивая загрузка. Удалены системная настройкаms3favorites.use_minishop3_toastи кастомные классы.ms3f__toastв CSS пакета.
Fixed
- Счётчики табов на странице wishlist:
getAllLists()без типа объединял списки всехresource_type; вкладки показывали лишние элементы при пустом списке текущего типа. В чанке страницы передаётсяdata-resource-typeиgetAllLists(pageResourceType).




Последние обсуждения в сообществе MODX.pro