Версия 1.0.2-beta
Дата выпуска 08.08.2017
Загрузки 90
Просмотры 914
Внимание, этот компонент требует версию PHP 5.3 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2.3 !
Пакет довольно прост и одновременно функционален. Выполняет систему рейтинга для любого объекта, по-умолчанию, для ресурсов. Чем-то напоминает систему лайков на 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.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