К содержанию

ms3Favorites — избранное для MODX Revolution 3 и MiniShop3



Пользователи сохраняют товары и ресурсы в избранное, возвращаются к покупке позже, делятся списком по ссылке и оформляют заказ со страницы /wishlist/. Список хранится в браузере (localStorage или cookie), при необходимости синхронизируется с БД для авторизованных и гостей — по системным настройкам. Это помогает удерживать вовлечённость, повторные визиты и конверсию без навязанной вёрстки витрины.

Это дополнение для тех, кому нужно:
  • несколько именованных списков (подарки, планы покупок и свои названия) с лимитом через настройки пространства имён ms3favorites;
  • шаринг по уникальной ссылке /wishlist/share?token=… и копирование чужого списка к себе;
  • страница избранного на ms3FavoritesPage: табы, панель действий, для товаров по умолчанию — SSR в чанке (pdoPage + msProducts); для кастомных сценариев — цепочка ms3FavoritesIds → pdoPage → ms3Favorites (или снова msProducts);
  • добавление в корзину MiniShop3: весь список или только отмеченные позиции;
  • заметки к позициям в карточках (включается настройкой), с сохранением через коннектор;
  • единый сценарий для разных типов контента через resource_type (товары MS3, ресурсы, статьи, страницы и др.).


✨ Ключевые возможности
  • кнопка избранного с data-favorites-toggle, счётчик data-favorites-count, выбор активного списка (tplFavoritesListSelector / сниппет ms3FavoritesLists);
  • уведомления по цепочке: свой ms3fConfig.notify → ms3Message (MiniShop3) → iziToast (при необходимости подгружается из пакета);
  • режим списка data-favorites-mode=«list» и обёртка карточки .ms3f-parent — скрытие всей карточки при удалении из избранного;
  • сниппеты: ms3FavoritesBtn, ms3FavoritesCounter, ms3Favorites, ms3FavoritesIds, ms3FavoritesPage, ms3FavoritesShare, ms3FavoritesPopularity, ms3fLexiconScript;
  • AJAX-коннектор: sync, шаринг и копирование, комментарии, корзина, очистка, популярность; HTML-вывод списка для ms3Favorites.render();
  • плейсхолдер ms3f.total для серверного счётчика; на странице списка доступна настройка порядка через параметры ms3FavoritesPage;
  • интеграция с mxQuickView и mFilter (актуализация кнопок после подгрузки контента);
  • лексикон RU/EN, BEM-префикс ms3f, CSS-переменные, адаптивная вёрстка блока списка.
🛒 MiniShop3
  • вывод избранного через msProducts и pdoTools — по документации и готовому чанку tplCatalogRowMs3f для строки каталога;
  • действие add_to_cart в коннекторе; на /wishlist/ — чекбоксы и кнопки массового добавления в корзину;
  • гибкая кастомизация чанков и стилей под уже существующую витрину.
🔒 Надёжность на фронте
  • изменяющие запросы к коннектору — с заголовком X-Requested-With: XMLHttpRequest;
  • настраиваемые лимиты элементов и списков, TTL записей гостей и срок жизни ссылок шаринга (см. настройки ms3favorites.*).
🚀 Быстрый старт
  1. Установите пакет через Extras → Installer (репозиторий ModStore; заранее установлены MiniShop3 и pdoTools).
  2. Подключите [[!ms3fLexiconScript]], затем CSS и favorites.js из assets/components/ms3favorites/.
  3. Разметьте кнопки: data-favorites-toggle, data-id, при необходимости data-list и data-resource-type.
  4. Страницу списка выведите сниппетом [[!ms3FavoritesPage]]; пагинацию, каталог и нестандартные страницы — по интеграции на docs.modx.pro.
  5. Настройки → Очистить кэш.
📋 Требования
  • MODX Revolution 3.0+
  • PHP >=8.2
  • MiniShop3 (актуальная установка для вашего проекта)
  • pdoTools 3.x (рекомендуется для вывода списков и Fenom)
Документация ms3Favorites

Дополнение в магазине Modstore

Демо сайт будет готов в течении нескольких дней.
Иван Бочкарев
Иван Бочкарев
03 апреля 2026, 10:07
modx.pro
1 811
Реклама

Комментарии: 4

Ivan K.
Ivan K. Старожил
14 апреля 2026, 16:41
Нужный компонент, прикупил.
Но почему-то не могу поставить «плюс» к этой заметке, да и к другим тоже)) Стрелки не активны
    Иван Бочкарев
    Иван Бочкарев Администратор
    14 апреля 2026, 16:44
    Надо будет разобраться, в чем проблема — но чуть позже. Спасибо!

    Если будут проблемы — пишите
      Николай Савин
      Николай Савин Администратор
      14 апреля 2026, 19:53
      У стрелок есть срок жизни. Кажется месяц. Вася так сделал, потому что на тот момент гонялись за рейтингом и накручивали, лайкая старые заметки.
    Иван Бочкарев
    Иван Бочкарев Администратор
    3 часа назад
    За октябрь месяц вышло 4-ре новые версии:

    [1.1.9] — 2026-10-25
    Fixed
    • «Скопировать в мой список»: клик обрабатывает favorites.js, отдельный скрипт на странице не нужен. Если в data-token пусто (в шаблоне страницы нет переменной {$token}), токен берётся из ?token= в адресе. Пустой токен больше не проходит молча: показывается «Не удалось скопировать список»
    [1.1.8] — 2026-10-22
    Fixed
    • Страница шаринга: кнопка «Скопировать в мой список» вызывает copy_share и добавляет товары чужого списка в своё избранное. Раньше клик создавал ссылку на список посетителя. Тип ресурсов берётся из записи шаринга. Для гостя пишется только целевой список. Тост после успеха: «Список скопирован»
    [1.1.7] — 2026-10-20
    Fixed
    • Страница /wishlist/: удаление одной карточки больше не снимает обёртку всего списка. msProducts в tplFavoritesPage показывает неопубликованные и товары с нулевой ценой, как адаптер списка, чтобы число на вкладке совпадало с карточками
    • ms3FavoritesBtn remove: remove=1 перезагружает страницу, другое значение удаляет элемент #префикс-{id}
    • ms3FavoritesCounter: чанк пишет data-list и data-resource-type. После загрузки favorites.js счётчик остаётся по списку и типу вызова. Голый счётчик без атрибутов по-прежнему суммирует все типы
    • ms3favorites.max_items: пустой limit у ms3Favorites и пустой pageLimit у ms3FavoritesPage берут настройку. Явный параметр в вызове по-прежнему важнее. Потолок 100
    • ms3favorites.max_lists: sync режет списки так же, как браузер: min(настройка, 20). У авторизованного пользователя списки сверх потолка удаляются из БД, у гостя набор перезаписывается целиком
    • ms3FavoritesShare: живой токен с пустым списком выводит emptyTpl. «Список не найден» остаётся для отсутствующего и просроченного токена
    • Тосты без window.ms3fLexicon: запасной русский текст, а не ключ ms3favorites_*
    • Changed
    • Описание storage_type: cookie привязана к текущему хосту (path=/, SameSite=Lax, 30 дней), без общего домена поддоменов
    • Описание max_lists: дефолт 10, потолок 20
    [1.1.6] — 2026-10-20
    Added
    • Шаринг для гостей: настройка ms3favorites.share_guests_enabled (по умолчанию Нет). Вместе с guest_db_enabled гость создаёт публичную ссылку на свой список (session_id, user_id = 0). Ссылка смотрит на текущий список сессии, а не на снимок. После очистки гостевых записей по guest_ttl_days страница по token открывается пустой, даже если share_ttl_days ещё не истёк
    • Миграция ms3favorites_shares: колонки session_id и is_guest
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4