[msFavorites] - апгрейд компонента.

msFavorites — списки избранного.


— работа с любыми ресурсами
— работа с любыми пользователями

Основное отличие от ранних версий работа без каких либо сниппетов, нужно только инициализировать скрипт.
Интерактивные примеры тут msfavorites.vgrish.ru/



Основное


Вы можете использовать msFavorites где угодно на странице. Для этого нужно подключить сниппет
msFavorites.initialize, указать нужным элементам необходимые параметры вызова.

data-msfavorites-mode — режим работы,
list — список избранного, в данном режиме удаляется элемент избранного
data-data-list — список избранного, например default
data-data-id — идентификатор обрабатываемого ресурса


Особенности


Список избранного работает для все пользователей. Для авторизованных пользователей идентификатором
служит id пользователя, для неавторизованный id сессии. Избранному анонимных пользователей присваивается флаг
временный и проставляется метка создания, можно задать интервал (кол-во дней) жизни.



пример 2
Постановка:
— требуется вывести список избранного
— возможность удалить ресурс из списка избранного default
— вывести общий счетчик кол-ва в избранном

Вызов:
<div id="pdopage">
			<div class="rows">
			[[!pdoPage?
			&parents=`0`
			&element=`msProducts`
			&resources=`[[!msFavorites.ids]]`
			&tpl=`@INLINE
			<div class="msfavorites-parent">
			<a class="msfavorites"
			data-click
			data-data-id="[[+id]]"
			data-data-list="default"
			data-msfavorites-mode="list">
			<i class="msfavorites-icon-heart"></i>
			</a>
			<span class="msfavorites-total" data-data-list="default">0</span>
			[[+pagetitle]]
			</div>
			`
			&ajaxMode=`default`
			]]
			</div>
			[[!+page.nav]]
			</div>

Результат:



Примеры



пример 1
Постановка:
— требуется вывести список ресурсов
— возможность добавить ресурс в список избранного default
— вывести общий счетчик кол-ва в избранном

Вызов:
<div id="pdopage">
			<div class="rows">
			[[!pdoPage?
			&parents=`0`
			&element=`msProducts`
			&tpl=`@INLINE
			<a class="msfavorites"
			data-click
			data-data-id="[[+id]]"
			data-data-list="default">
			<i class="msfavorites-icon-heart"></i>
			</a>
			<span class="msfavorites-total" data-data-list="default">0</span>
			[[+pagetitle]]
			`
			&ajaxMode=`default`
			]]
			</div>
			[[!+page.nav]]
			</div>

Результат:



Подключение msFavorites


В удобном месте шаблона сайта вам нужно вставить вызов сниппета msFavorites.initialize

[[!msFavorites.initialize]]


Настройка msFavorites


Основные настройки msFavorites находяться Настройки системы -> msFavorites


front_css — стили фронтенда
front_js — скрипты фронтенда
clear_temporary — очищать временные списки


Списки избранного


Вы можете использовать сниппет msFavorites.ids для получения списка ресурсов в избранном.


[[!msFavorites.ids?&list=`default`]]
list — название списка избранного

Так же сниппет задает плейсхолдеры вида
[[!+msfavorite.list.default]]
			[[!+msfavorite.total.default]]
msfavorite.list.default — список ресурсов в избранном default
msfavorite.total.default — общее кол-во ресурсов в избранном default

Володя
25 мая 2017, 16:34
modx.pro
3
4 220
+7
Поблагодарить автора Отправить деньги

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

ck
ck
26 мая 2017, 10:17
+1
Т.е. после обновления нужно переделать вызовы?
    Володя
    26 мая 2017, 11:52
    +1
    Да, формат вызова другой, избранное хранится только в базе… все иначе…
Илья
26 мая 2017, 11:50
0
А пакет уже в репозитории?
Что у меня нет предложения обновления:
Илья
26 мая 2017, 16:41
0
Володя, а &removeElement=`1` работает?
    Володя
    26 мая 2017, 16:59
    0
    Володя, а &removeElement=`1` работает?
    нет, нужно указать параметр
    data-msfavorites-mode="list"
    и ограничить элемент блок
    <div class="msfavorites-parent">

    пример msfavorites.vgrish.ru/favorites.html
      Илья
      26 мая 2017, 17:30
      0
      да, это я понял
      раньше страница перезагружалась, при удалении последнего избранного товара, и выскакивала дефолтная надпись:
      [[!msProducts:default=`<div><strong>Ваш список избранных проектов пока пуст</strong></div>`?
      Ещё вопрос:
      у меня сразу после тега bodi выскочила вот такая надпись: msFavorites::__call says: isRemove
      что это может быть?
        Володя
        26 мая 2017, 17:42
        0
        раньше страница перезагружалась, при удалении последнего избранного товара, и выскакивала дефолтная надпись
        да про это я подзабыл… нужный функционал?
        у меня сразу после тега bodi выскочила вот такая надпись: msFavorites::__call says: isRemove
        вы где то используете старый сниппет… советую вам деинсталировать пакет, удалить все сниппеты и затем установить заново…
          Илья
          26 мая 2017, 17:58
          +1
          нужный функционал?
          ну, если не сложно, то было бы не плохо )))
          а так, спасибо за проделанную работу!
          отличный компонент!
            Володя
            26 мая 2017, 18:14
            +1
            готово!
            а так, спасибо за проделанную работу!
            отличный компонент!
            пожалуйста!
        Stan Ezersky
        26 мая 2017, 18:36
        0
        Хм, у меня старая версия на одном из сайтов стоит, нет перезагрузки, всё ajax
          Илья
          26 мая 2017, 20:44
          0
          Так вы через AjaxSnippet фавориты выводите?
            Stan Ezersky
            26 мая 2017, 20:48
            0
            Нет, «из коробки» всё было в предыдущей версии
            Володя
            26 мая 2017, 22:01
            0
            нет, примеры вызовов есть на демо сайте.
Илья
26 мая 2017, 17:57
0
делит
Сергей
14 июня 2017, 20:48
0
Почему [[!+msfavorite.total.default]] показывает количество торов и избранном только на странице избранные товары, если перейти на другую страницу, то не показывает это значение. Добавил сердечко с количеством в шапку сайта.
    Володя
    14 июня 2017, 21:10
    0
    Почему [[!+msfavorite.total.default]] показывает количество торов
    показывает если предварительно вызвать сниппет
    [[!msFavorites.ids?&list=`default`&toPlaceholder=`x`]]
    именно он выставляет плейсхолдеры

    либо второй вариант если скрипт компонента присутствует на странице можно просто вставить где либо в код страницы
    <span class="msfavorites"
    data-data-list="default">
    </span>
    и тогда скрипт будет инициализирован и подгрузится кол-во в избранном
Сергей
14 июня 2017, 22:08
0
Все равно работает коряво, получается если я убираю из избранного, происходит пересчет, если добавляю, то не чего не происходит, только после обновления страницы меняется число.
    Володя
    14 июня 2017, 22:32
    0
    Тогда пишите в ТП с указанием доступов.
    Спасибо.
Илья
19 июня 2017, 16:15
0
Владимир привет!
Я что-то сразу не заметил, но у меня после обновления вот такая картина с меню msfavorites



и ошибка:

[2017-06-19 16:13:49] (ERROR @ /home/s21221211/www/core/xpdo/xpdo.class.php : 644) Could not load class: msFavoritesOnHandleRequest from msfavoritesonhandlerequest.
    Володя
    19 июня 2017, 16:50
    0
    Привет.
    Я что-то сразу не заметил, но у меня после обновления вот такая картина с меню msfavorites
    этот рудимент вырезан с корнями. Не вижу никакой пользы тащить это далее…
    если вам необходим функционал вывода избранного у пользователей напишите в ТП, набросаю вызов сниппета для вывода.
    Спасибо!
Евгений
20 июня 2017, 18:08
0
После обновления консоль выдает ошибку:
Uncaught TypeError: Cannot read property 'fn' of undefined
at default.min.js?v=d79f078f:formatted:183
at default.min.js?v=d79f078f:formatted:240
    Володя
    20 июня 2017, 21:56
    0
    Старая версия jquery?
    Пишите в ТП и приложите доступы если проблемы…
    Спасибо!
      Евгений
      21 июня 2017, 11:01
      0
      Версия jquery — 3.2.1.
      Доступы, к сожалению дать не смогу, т.к. сайт еще на локалке висит.
        Володя
        21 июня 2017, 11:03
        0
        тогда незнаю. Попробуйте продублировать ситуацию на тестовом хостинге modhost.pro/
        и покажите эту проблему.
        Спасибо!
          Евгений
          21 июня 2017, 11:05
          0
          Ок, попробую.

          Конкретно ошибку по этому куску кода выдает:

          a.fn.msfavorites = function() {

          }(window.jQuery, msFavoritesConfig);
            Володя
            21 июня 2017, 11:23
            0
            Оказывается это я не был готов к свежей версии jquery.
            Поправил, обновитесь.
            Спасибо!
              Евгений
              21 июня 2017, 11:53
              0
              Ошибка сохранилась. Теперь на код
              t.fn.msfavorites = function() {
              }(window.jQuery, msFavoritesConfig);
              ругается… кэш почистил — тоже самое(
                Володя
                21 июня 2017, 12:04
                0
                msfavorites.vgrish.ru/
                все работает, ошибок нет.
                Накати обновлние, кеш и все должно работать.
Василий Столейков
21 августа 2017, 08:51
0
Как сортируются списки избранного? Можно ли сортировать по дате добавления в избранное?
    Володя
    21 августа 2017, 10:10
    +1
    ПРивет. Да чет я этот момент упустил.
    Добавил сортировку и параметр для сортировки избранного в сниппет msFavorites.ids
    дефолт
    {"timestamp": "ASC"}
    можно обновить компонент…
Илья
15 сентября 2017, 12:33
0
Володя, помоги:

    Володя
    15 сентября 2017, 12:39
    +3
    Обнови до последней версии компонент, там баг поправлен.
Антон
16 октября 2017, 12:41
0
Поделитесь, пожалуйста, где и как вы ссылку на списки избранного размещаете.
В старой версии активировался переход на страницу избранных при добавлении.
Если не добавлять, то нет перехода.

Возникла идея чтобы в меню появлялось сердечко при условии, что хоть 1 товар там есть.
И в футер наверно тоже сердечко нужно. Если ничего не отмечено, то и ничего не мозолит глаза.
Есть такая возможность?
    Володя
    16 октября 2017, 12:46
    0
    Открыть пример работы компонента msfavorites.vgrish.ru/
    там есть то о чем вы говорите.
Сергей Кепкин
25 октября 2017, 15:22
0
Подскажите, что может быть, появилось неделю назад, до обновления, обновил компонент — также глючит:
захожу на сайт с чистой сессией — все ок, через какое-то время или после каких-то действии в счетчике избранного (код чуть ниже) вместо нуля — единичка, причем при обновлении страницы видно что мелькает ноль и затем единичка. Захожу на страницу избранных товаров — там пусто.
К сожалению, связь не отловил, в связи с чем так происходит.

Описываемый глюк происходит в таком блоке:
<span class="msfavorites-total" data-data-list="default">0</span>
все новое, кроме ModX=2.5.7 — пока очкую обновлять на продакшене
    Володя
    25 октября 2017, 15:25
    0
    К сожалению, связь не отловил, в связи с чем так происходит.
    предположительно у вас в каком то месте вместо id товара стоит id категории. вы его успешно добавляете в избранное, но в списках его естественно нет.
      Сергей Кепкин
      25 октября 2017, 16:07
      0
      связь не отловил, но точно не добавляю в избранное, т.е. как будто само добавляется
Сергей Макаров
24 ноября 2017, 23:18
1
0
Добрый день! подскажите пожалйста а как уже внутри карточки добавить сердечко (В избранное) -внутри страницы товара я имею в виду (и то там у меня список всех товаров выводит(((((
    Сергей Кепкин
    25 ноября 2017, 00:31
    0
    <a title="В список понравившихся товаров" class="msfavorites" data-click data-data-id="[[*id]]" data-data-list="default">
    <i class="msfavorites-icon-heart"></i>
    </a>
start.exe
15 июня 2018, 13:29
0
задача такая — в шапке сайта видим общее количество, а при открытии страницы с избранным видим несколько списков, у каждого свой total. возникает вопрос:

предусмотрена ли возможность для вывода общего количества элементов указанных списков, типа

<span class="msfavorites-total" data-data-list="list1,list2">0</span>

    Володя
    15 июня 2018, 14:02
    0
    нет, подобное не предусмотрено.
    Вы можете в js обработать ответ, получить общее кол-во и вывести куда нужно.
Александр
01 июля 2018, 08:13
0
А как-то можно вывести количество добавлений в избранное для конкретного товара?
Мне нужно под каждым товаром показать у скольких людей он в избранном. Запутался в новой документации, до апгрейда как-то попроще было что ли.
    Володя
    01 июля 2018, 12:04
    0
    Добрый день.
    Мне нужно под каждым товаром показать у скольких людей он в избранном.

    добавить разметку вида
    <span class="msfavorites-total-user" data-data-list="default" data-data-id="44"></span>
    пример msfavorites.vgrish.ru/several-lists.html
Алексей Смирнов
06 сентября 2018, 22:22
0
Хорошее и полезное дополнение.
Но пришлось откатиться на первую версию компонента (благо покупал давно и осталась) т.к. во 2й существует сейчас непреодолимая вещь:
У меня в ручную реализованы схожие товары и есть ведомый товар, который доступен, остальные товары (связанные) отдают 301 редирект на главный товар (страницы товаров со своими ID). Так вот при попытке добавить связанные товары — появляется ошибка в консоли js. и все. Как только убираю редиректы со связанных товаров — все работает.
Убил день на то чтобы понять это…
Зачем проверять доступность ресурса по ID — мне не ясно.
Есть просьба убрать эту проверку или как-то сделать ее выключаемой, т.к. думаю могут в перспективе быть подобные проблемы у людей (хотя сомневаюсь — наверное я единственный ))) ) но все же.
Спасибо.
    Володя
    07 сентября 2018, 08:04
    0
    Хорошее и полезное дополнение.
    спасибо!
    Зачем проверять доступность ресурса по ID — мне не ясно.
    чтобы не добавлять в список избранного того чего нет.
    Есть просьба убрать эту проверку или как-то сделать

    Сначала стоит разобраться что за ошибка у вас была и каким образом реализован редирект.
    Уточните, спасибо!
      Алексей Смирнов
      07 сентября 2018, 11:11
      0
      К сожалению проект в производстве, поэтому уже удалил 2ю версию компонента.
      Ошибок в логе небыло, лишь после нажатия на «Добавить в избранное» ничего не происходило, а в консоли браузера писалась (самим скриптом) error… (2 слова).
      Ошибку отправляет класс на сколько я сумел влезть в код: класс (public function processResource($rid = 0)) в файле msfavorites.class.php. Точнее не отправлял а не давал сработать компоненту.
      А у меня подчиненные ресурсы отдают редирект таким кодом:
      //$sendok  - url главного товара.
       $modx->sendRedirect($sendok,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
      этот код в снипете на странице конкретного товара.
      Если этих данных достаточно, то ок. Иначе чуть позже на тестовом воссоздам ситуацию.
        Володя
        07 сентября 2018, 12:48
        0
        А у меня подчиненные ресурсы отдают редирект таким кодом:
        просто редирект не вызывает такого поведения.
        добавил редирект на товар 1
        msfavorites.vgrish.ru/katalog/tovar-1.html как видим тут msfavorites.vgrish.ru
        все нормально функционирует и нет никаких ошибок.

        Так что дело явно не в этом.
Ivan
19 октября 2018, 13:58
0
Здравствуйте!
Стоит задача реализовать уведомление об добавлении в избранное, как это можно сделать? После добавления, должно выводится модальное окно, с текстом, что Товар 32 был добавлен в избранное. Пока реализовал на jQuery, но есть ли предусмотренный вариант или как лучше это сделать?
    Володя
    19 октября 2018, 15:29
    1
    +1
    Добрый день.
    Предусмотренного варианта нет, можно например использовать уведомления minishop
    <script>
        $(document).ready(function () {
            if (typeof msFavorites != 'undefined' && typeof miniShop2 != 'undefined') {
                msFavorites.addMethodAction('success', 'name_action', function(){
                    miniShop2.Message.initialize();
                    var self = this; 
                    if (self.data && self.data.method == 'add') {
                        miniShop2.Message.success('add');
                    }
                    if (self.data && self.data.method == 'remove') {
                        miniShop2.Message.info('remove');
                    }
                });
            }
        });
    </script>
Денис
14 августа 2019, 19:17
0
Добрый день!
Подскажите, данный компонент работает для неавторизованных пользователей?
    Володя
    14 августа 2019, 19:20
    0
    Добрый.
    Да.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
55