LikeDislike
По мотивам топика. Спасибо за компонент говорим lex . Я выкладываю только общий вариант, без комментариев к дизлайкам: github.com/Pathologic/LikeDislike.
В коробке:
никакая простая — куки, ip, также можно разрешить оценивать только зарегистрированным пользователям.
На странице документа нужно подключить скрипт jGrowl:
И скрипт для ajax-обработчика:
Вызов сниппета выглядит так:
Скрипт likedislike.js написан под верстку в этом примере.
Кроме вывода шаблонов сниппет задает плейсхолдеры [+modResource.like.{id}+] и [+modResource.dislike.{id}+].
В коробке:
- сниппет LikeDislike, который и дает возможность ставить оценки;
- сниппет ldController для запуска DocLister с расширенным контроллером site_content;
- модуль LikeDislike, чтобы видеть оценки в админке.
Установка
После установки нужно запустить модуль, чтобы создались таблицы.На странице документа нужно подключить скрипт jGrowl:
<script type="text/javascript" src="assets/js/jGrowl/jquery.jgrowl.min.js"></script>
<link rel="stylesheet" href="assets/js/jGrowl/jquery.jgrowl.min.css">
И скрипт для ajax-обработчика:
<script type="text/javascript" src="assets/snippets/LikeDislike/likedislike.js"></script>
<link rel="stylesheet" href="assets/snippets/LikeDislike/likedislike.css">
Вызов сниппета выглядит так:
[!LikeDislike?
&enabledTpl=`@CODE:
<div class="likedislike" data-id="[+rid+]"><a href="#" class="like"><i class="fa fa-lg fa-thumbs-up"></i> <span>[+like+]</span></a> <a href="#" class="dislike"><i class="fa fa-lg fa-thumbs-down"></i> <span>[+dislike+]</span></a></div>
`
&disabledTpl=`@CODE:
<div class="likedislike"><span class="like">За: <span>[+like+]</span></span><span class="dislike">Против: <span>[+dislike+]</span></span></div>
`!]
Скрипт likedislike.js написан под верстку в этом примере.
Кроме вывода шаблонов сниппет задает плейсхолдеры [+modResource.like.{id}+] и [+modResource.dislike.{id}+].
Параметры сниппета LikeDislike
- rid — id оцениваемого ресурса, если параметр не задан, то по возможности используется id текущего ресурса;
- classKey — параметр позволяющий разделять оцениваемые сущности. Сделано на будущее, вдруг понадобится ставить оценки пользователям или еще чему-нибудь. По умолчанию — modResource.
- action — действие: like, dislike, stat (по умолчанию — stat);
- enabledTpl — шаблон, если разрешено оценивать;
- disabledTpl — шаблон, если запрещено оценивать;
- onlyUsers — разрешено оценивать только зарегистрированным пользователям;
Параметры сниппета ldController
- allowLD — разрешить оценивать в списке (по умолчанию — 0);
- enabledTpl — шаблон, если разрешено оценивать;
- disabledTpl — шаблон, если запрещено оценивать;
- onlyUsers — разрешено оценивать только зарегистрированным пользователям;
- classKey;
15 комментариев
Поясню.
Поставил LikeDislike на уже готовый интернет магазин с eFilter. По странице товаров — вопросов нет. По выводу в каталог — оключил eFilter и вместо него поставил ldController — все работает.
Дальше надо чтобы работал и фильтр.
В сниппете eFilterResult в runSnippet меняю DocLister на ldController, проверяю до использования фильтра — работает. В вот если предварительно что-то отфильтровать — то уже не работает, при клике на lile или dislike перебрасывает на главную. Такой вот конфликт.
Это первый вопрос.
Второй вопрос.
Вполне может оказаться, что в сниппете eFilterResult в runSnippet уже нет DocLister'а, потому как он уже раньше был заменен на sgController (делал недавно такой сайт) — как быть в таком случае? Как сделать матрешку eFilterResult — sgController — ldController — DocLister и правильный ли это путь, учитывая дальнейшее развитие и увеличения количества подобных компонентов?
Так и должно быть, ведь загруженным элементам не назначен обработчик событий. можно изменить в likedislike.js:
Сам сниппет, пусть будет условно ldsgController:
Ну и очистить кэш браузера, чтобы в модуле появилась новая колонка.
item_tpl:
А реально ли, чтобы лайк работал на подобии, как в контакте. т.е. человек нажал на лайк, потом передумал, нажал на него опять, и лайк отменился.