MyFavorites

MyFavorites – компонент, который позволяет добавить на сайт списки избранного. Основной упор сделан на работу с анонимными пользователями, аналитикой и защитой от ботов.

Основные возможности компонента
  • Создание различных списков избранного.
  • Работа как с анонимными пользователями, так и только с зарегистрированными.
  • Пользовательские списки избранного (пользователь может сам создавать/переименовывать и удалять свои списки).
  • Очистка сессий сайта и удаление кук пользователем не влияют на список избранного у анонимных пользователей.
  • Идентификация анонимного пользователя и, как следствие, его списка избранного, посетившего сайт с разных браузеров (метод не срабатывает во всех 100% случаев. На сайте должна быть подключена Google Analytics или Яндекс.Метрика).
  • Привязка списка избранного анонимного пользователя к зарегистрированному пользователю при его авторизации или создании заказа на сайте.
  • Синхронизация избранного на разных устройствах/браузерах, если ранее не было определено, что они принадлежат одному и тому же пользователю.
  • Передача данных о событиях добавления/удаления и очистки списка избранного в Google Analytics и Яндекс.Метрика.
  • Черные списки IP.
  • Защита от CSRF-атаки.
  • Защита с помощью reCAPTCHA 3.
  • Лимит на запросы для анонимных и зарегистрированных пользователей.
  • Уведомление на Email о подозрительной активности пользователя.
  • Доступ в админке сайта к информации о пользователях, их списках избранного и активности.
  • Экспорт информации о пользователях и избранном в CSV, XLSX и ODS.
  • Корректная работа с Cloudflare.
  • Быстрая кастомизация стилей через CSS переменные.
  • Возможность подписываться на JS события компонента для кастомизации его работы.
  • Нативный JavaScript.

Видео-обзор


RuTube

Купить
Prihod
Prihod
24 мая 2024, 16:31
modx.pro
3 510

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

Sergey (Sentinel)
05 августа 2024, 23:46
А как-то можно чтобы
[[!MyFavorites.ids? &toPlaceholder=`myf.ids`]]
[[!+myf.ids:is=`-0`:then=`
  [[%myfavorites_info_list_empty]]
`:else=`
  [[!pdoPage?
    &element=`msProducts`
    &parents=`0`
    &limit=`12`
    &resources=`[[!+myf.ids]]`
  ]]
  <button class="btn btn-primary" data-myfavorites-clear>[[%myfavorites_clear_list]]</button>
  [[!+page.nav]]
`]]
через ajax обновлялось при добавлении товара? нужно в modal выводить список
    Prihod
    06 августа 2024, 18:50
    Не совсем понял что обновилось, в модальном окне товар из списка избаранного?
      Sergey (Sentinel)
      06 августа 2024, 19:07
      Да.
      Я написал скрипт, который при клике на сердечко открывает modal окно
      const modal = document.querySelector(".modal-wishlist-main");
      const closeButton = document.querySelector(".close-btn");
      
      function toggleModal() {
          modal.classList.toggle("open");
      }
      
      function windowOnClick(event) {
          if (event.target === modal || event.target.closest(".modal-wishlist-main")) {
              toggleModal();
          }
      }
      
      document.addEventListener("click", function(event) {
          if (event.target.classList.contains("myfavorites-btn")) {
              toggleModal();
          } else if (event.target === closeButton) {
              toggleModal();
          } else if (!modal.contains(event.target)) {
              if (modal.classList.contains("open")) {
                  toggleModal();
              }
          }
      });
      Но
      [[!pdoPage?
          &element=`msProducts`
          &parents=`0`
          &limit=`12`
          &resources=`[[!+myf.ids]]`
        ]]
      обновляется только при перезагрузки страницы, соответственно при всплывании окна там пусто
        Prihod
        06 августа 2024, 19:55
        Ну тебе нужно перед показом окна делать самому AJAX запрос на сайт что бы подтянуть инфу с списком избранного и добавлять его в модальное окно после чего показывать. Из коробки такого функционала нет.
          Sergey (Sentinel)
          07 августа 2024, 13:39
          Понял, спасибо.
          Так же на тесте не работают уведомления из коробки ms2
          s34437.h5.modhost.pro/index.php?id=3
            Sergey (Sentinel)
            07 августа 2024, 16:54
            class MyNotifier {
              success(msg) {
                  iziToast.success({
                      title: 'Success',
                      message: msg,
                  });
              }
              error(msg) {
                  iziToast.error({
                      title: 'Error',
                      message: msg,
                  });
              }
            }
            
            window.addEventListener('DOMContentLoaded', e => {
              myFavorites.on('init', (self) => {
                  const notifier = new MyNotifier();
                  self.setNotifier(notifier);
              });
            });
            и так тоже не работает
              Prihod
              07 августа 2024, 20:42
              При добавлении или удалении в избранное сообщений никаких нет так как по индикатору и так все понятно и нет смысла лишний раз перегружать интерфейс лишней инфой, если они тебе нужны то ты сам должен их показывать

              window.addEventListener('DOMContentLoaded', e => {
              myFavorites.on('add', (self) => {
                   self.notifier.success("add success");
                });
              myFavorites.on('remove', (self) => {
                   self.notifier.success("remove success");
                });
              });
    Oleg
    26 июля 2025, 11:05
    Добрый день. Есть такая задача.
    Нужно сделать, чтобы в избранное можно было добавлять статьи. И чтобы была возможность делится этой подборкой статей с кем-то передав ссылку.
    С этим компонентом я смогу это реализовать?

    Заранее благодарю за ответ.
      Владислав
      28 июля 2025, 13:30
      Сможешь реализовать.
        Oleg
        08 августа 2025, 12:52
        Вот эта настройка «myfavorites_custom_favorite_lists» позволяет создавать пользователю список избранного, которым можно поделится с другими передав ссылку?
        c2n.me/4n02gVW
      Prihod
      21 июля 2026, 23:08
      MyFavorites — 3.0.0-beta

      Первая версия для MODX Revolution 3.x — компонент полностью переписан с нуля (PHP >= 8.4, namespaced-ядро MODX 3, PSR-4, сервис-ориентированная архитектура). Чистая установка; совместимость с данными, куками и настройками старой версии для MODX 2 не предусмотрена.

      Добавлено
      — Публичный REST API (assets/components/myfavorites/api.php) для фронтенд-виджета и стороннего кода (мобильные приложения, кастомный фронтенд)
      — Фронтенд-виджет на нативном TypeScript (сборка Vite), без внешних JS-зависимостей; кастомизация через CSS-переменные и подписку на JS-события
      — Сниппеты MyFavorites, MyFavorites.btn, MyFavorites.counter, MyFavorites.lists, MyFavorites.ids, MyFavorites.share
      — Пользовательские списки избранного: создание, переименование и удаление своих списков посетителем (настройка myfavorites_custom_favorite_lists)
      — Публичные ссылки на списки избранного с копированием ссылки в буфер обмена одним кликом
      — Синхронизация списков между устройствами: слияние избранного при авторизации или совпадении меток аналитики (настройка myfavorites_sync_favorite), ленивая инвалидация кэша по версии
      — Синхронизация индикатора избранного: обновление всех кнопок товара на странице и между открытыми вкладками браузера через BroadcastChannel (настройка myfavorites_tab_sync)
      — Идентификация анонимных посетителей по собственной cookie (_mfuid, дублируется в localStorage) и меткам систем аналитики (_ym_uid, _ga)
      — Экспорт данных избранного и посетителей из админки в CSV/XLSX/ODS; реестр отчётов задаётся настройкой myfavorites_export_handlers
      — Дашборд в админке: KPI, динамика активности (7/30/90 дней), топ ресурсов, распределения действий/типов пользователей/браузеров, лента событий и блок «Безопасность» (срабатывания защиты)
      — Уведомления администратора о срабатывании защиты (превышение лимита запросов, провал капчи, бан по IP); каналы доставки email и Telegram, канал заменяем через NotifierInterface
      — Защита REST API: CSRF-токены, чёрные списки IP, лимит запросов (rate limit), reCAPTCHA v3, Yandex SmartCaptcha, доверенные reverse-proxy для заголовка X-Forwarded-For
      — Аналитика: передача событий добавления/удаления/очистки/шаринга в Google Analytics и Яндекс.Метрику
      — Системные события OnMyFavorites* (добавление/удаление/очистка избранного, операции со списками, создание/восстановление/слияние посетителей, экспорт, срабатывание защиты) для расширения сторонними плагинами
      — Журнал действий с аудитом и автоматическая очистка устаревших записей и истёкших банов по CRON (скрипт cron/clear.php)



        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        11