MyFavorites

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

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


Купить
Prihod
24 мая 2024, 16:31
modx.pro
2
1 232
+11
Поблагодарить автора Отправить деньги

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

Sergey (Sentinel)
05 августа 2024, 23:46
0
А как-то можно чтобы
[[!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
    0
    Не совсем понял что обновилось, в модальном окне товар из списка избаранного?
      Sergey (Sentinel)
      06 августа 2024, 19:07
      0
      Да.
      Я написал скрипт, который при клике на сердечко открывает 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
        0
        Ну тебе нужно перед показом окна делать самому AJAX запрос на сайт что бы подтянуть инфу с списком избранного и добавлять его в модальное окно после чего показывать. Из коробки такого функционала нет.
          Sergey (Sentinel)
          07 августа 2024, 13:39
          0
          Понял, спасибо.
          Так же на тесте не работают уведомления из коробки ms2
          s34437.h5.modhost.pro/index.php?id=3
            Sergey (Sentinel)
            07 августа 2024, 16:54
            0
            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
              +1
              При добавлении или удалении в избранное сообщений никаких нет так как по индикатору и так все понятно и нет смысла лишний раз перегружать интерфейс лишней инфой, если они тебе нужны то ты сам должен их показывать

              window.addEventListener('DOMContentLoaded', e => {
              myFavorites.on('add', (self) => {
                   self.notifier.success("add success");
                });
              myFavorites.on('remove', (self) => {
                   self.notifier.success("remove success");
                });
              });
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    7