xLike

Идеальная система лайков
Бесплатно
Загрузите дополнение из админки вашего сайта.
Как загрузить?
Автор дополнения
Павел
Пакетов
33
Закачек
45 554
Автор дополнения
Пакетов
33
Закачек
45 554
Версия 1.1.2-beta
Дата выпуска 13.01.2021
Загрузки 1 022
Просмотры 14 862
Пакет довольно прост и одновременно функционален. Выполняет систему рейтинга для любого объекта, по-умолчанию, для ресурсов. Чем-то напоминает систему лайков на YouTube, в частности, в пакете реализован оптимистичный интерфейс.

Также, особенностью компонента является правильный подсчет рейтинга на основе вычисления нижней границы доверительного интервала Вильсона для параметра Бернулли. По-простому: эта формула не даст встать новым записям с 1 лайком и 0 дизлайками выше более старых записей с сильным рейтингом.

Список преимуществ:
  1. Оптимистичный интерфейс,
  2. Наиболее правильная формула вычисления рейтинга,
  3. Работа с любыми объектами (modResource, modUser, кастомные объекты),
  4. Голосование гостями,
  5. Анимированное изменения полосы/числа рейтинга,
  6. Событие плагина — xLikeOnVote.

Сниппет xLike

Выводит систему рейтинга на месте вызова.

Параметры
tpl — чанк шаблона вывода. По-умолчанию, tpl.xLike.
mode — режим работы сниппета: db или local. В режиме local сниппет обходится без запроса к базе для того, чтобы узнать кол-во лайков/дизлайков и рейтинг, вместо этого вам необходимо передать эти цифры в сниппет в качестве параметров. По-умолчанию, db.
guest — разрешить гостям голосовать. По-умолчанию, Да.
parent — ID объекта. По-умолчанию, ID текущего ресурса.
class — класс объекта. По-умолчанию, modResource.
list — название списка (дополнительный параметр группировки). По-умолчанию, default.

Примеры
Вывод рейтинга для текущего ресурса с возможностью голосовать гостям:
{'!xLike' | snippet}

Вывод рейтинга для текущего тикета без возможности голосовать гостям:
{'!xLike' | snippet : [
    'guest' => false,
    'class' => 'Ticket',
]}

Вывод рейтинга для текущего ресурса в режиме local:
{'!xLike' | snippet : [
    'mode' => 'local',
    'likes' => $_modx->resource['likes'],
    'dislikes' => $_modx->resource['dislikes'],
    'rating' => $_modx->resource['rating'],
]}
Подразумевается, что в ТВ полях likes, dislikes, rating хранится соответствующая информация.

Событие xLikeOnVote

Данное событие срабатывает после голосования пользователем и всех проверок.

Параметры плагина
parent — ID объекта, к которому привязан рейтинг,
class — класс объекта,
list — название списка,
likes — кол-во лайков,
dislikes — кол-во дизлайков,
rating — текущий рейтинг, уже пересчитанный.

Практическое применение
Задача: при голосовании в рейтинге (с параметрами сниппета class=modResource, list=default), записывать текущий рейтинг в ТВ поле rating.
Код плагина:
switch ($modx->event->name) {
    case "xLikeOnVote":
        if ($class == 'modResource' && $list == 'default') {
            if ($resource = $modx->getObject($class, array('id' => $parent))) {
                $resource->setTVValue('rating', $rating);
                $resource->save();
            }
        }
        break;
}
Таким образом, мы сможем сортировать ресурсы (или любые другие объекты) по правильно подсчитанному рейтингу.

1.1.2-beta (13.01.2021)

  • Добавлена поддержка IPv6

1.1.1-beta (13.01.2021)

  • Исправлена проблема с проверкой уникальности записи в процессоре xlVoteCreateProcessor

1.1.0-beta (13.01.2021)

  • Добавлена работа при отключённых сессиях для анонимов
  • Добавлен класс xlCrypter
  • Добавлены закриптованные параметры в чанк tpl.xLike
  • Добавлено обязательное включение параметра ip в сниппете xLike, если отключены сессии для анонимов
  • Добавлена работа с закриптованной строкой параметров сниппета в action.php

1.0.5-beta (15.09.2019)

  • Добавлено событие плагина xLikeOnCanVote

1.0.4-beta (06.03.2019)

  • Поправлена инициализация фронт-энд скриптов
  • Поправлен тег подключения JS кода

1.0.3-beta (30.07.2018)

  • Добавлен параметр &ip в сниппет, позволяющий отключить проверку по IP

1.0.2-beta (08.08.2017)

  • Добавлена жесткая связь modResource и modUser с объектом голоса xlVote, что позволяет при удалении ресурса или юзера, удалять связанные с ним объекты голосов

1.0.1-beta (17.07.2017)

  • Добавлен режим вызова сниппета (db, local)

1.0.0-beta (16.07.2017)

  • Start

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