xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Модули для "лайков" содержимого

Назрела необходимость выбрать модуль для лайков материалов и комментариев в Drupal 7. Поиск показал наличие как минимум 4-х:

  1. Flag
  2. Rate
  3. Vote Up/Down
  4. Plus 1

Сводная таблица возможностей:

Flag Rate 1 / Rate 2 Vote Up/Down Plus 1
Лайк любой сущности + - (ноды, комментарии) / + + (модуль Vote Up/Down field) - (ноды, комментарии, термины)
Ограничение по ролям + + + +
Лайк анонимными пользователями с помощью Session API + + +
Запретить лайкать свои сущности + + - -
Вывод виджета в ссылках (рядом с "read more") + - - -
Вывод виджета в качестве псевдо-поля + - (только в начале либо в конце ноды) / + + (с помощью Vote Up/Down field) -
Вывод числа лайков в виджете + (с помощью токена) + + +
Вывод числа лайков при отсутствии прав ставить лайк - (легко вывести с помощью api) + + +
Вывод списка лайкнувших - - - -
Интеграция с Views + + (на уровне Voting API) + (на уровне Voting API) + (на уровне Voting API)
Интеграция с Rules + (модуль Flag actions) с помощью Voting Rules с помощью Voting Rules с помощью Voting Rules
Хуки на установку/снятие лайка + + (на уровне Voting API) + (на уровне Voting API) + (на уровне Voting API)
Число установок модуля 34270 9021 2889 913

Flag очень приятный модуль, но по умолчанию нет возможности выводить число лайкнувших если у пользователя нет прав лайкать. Решается парой строчек кода в template.php. Пока остановился на нём.

Rate 1.x цепляется только к нодам и комментам. Rate 2.x в дремучей разработке.

Vote Up/Down под семёрку нестабилен, сыпет ошибками.

Plus 1 очень простой, но отпугивает малое число установок.

Добавлено 28.10.2013

Нашёл ещё два модуля для лайков:

1. Like Button — использует внешний сервис likebtn.com. За бесплатно дают возможность поставить только одну кнопку на странице. За интеграцию с Views придётся купить Pro аккаунт. Неприемлемо.

2. Like Dislike Buttons — пока напрочь отсутствуют любые настройки. Неприемлемо.

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Решается парой строчек кода в template.php.
____________________________________________
а не могли бы рассказать по этому поводу поподробнее

например для нод, флаг с именем node_like:

/**
 * Preprocess function for node.tpl.php.
 */
function THEMENAME_preprocess_node(&$vars) {
  if (!isset($vars['content']['flag_node_like'])) {
    $flag_counters = flag_get_counts('node', $vars['nid']);
    $vars['content']['flag_node_like']['#markup'] = isset($flag_counters['node_like']) ? $flag_counters['node_like'] : 0;
  }
}

флаг должен выводиться с помощью псевдо-поля

флагом не получится сделать две кнопки up-down с количеством и положительных и отрицательных оценок

это уже не лайки

ну тогда уж и Vote Up/Down не лайк

почему?

ну логика лайка в 2-х бальной оценке - либо лайк либо дизлайк
хотя в Vote Up/Down вроде тоже есть такой виджет

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

логика лайка - в однобальной системе
у Vote Up/Down есть соответствующий виджет

логика лайка - в однобальной системе
___________________________
ну так либо лайкнул ,либо мимо прошел - уже 2-х бальная получается:)

Rate самое то для этой задачи

"Вывод виджета в ссылках (рядом с "read more")"
так ведь опять таки можно в препроцессе подредактировать links

я еще добавлю статистику использования этих модулей
rate - 8759 sites
plus1 - 876 sittes
Vote Up/Down - 2868 sites
флаг тяжело подсчитать ,тк он используется не только для этого ,но 32689 sites

Подскажите, с помощью какого модуля можно выставить кол-во голосов в сутки. Ставил Voting up/down, extra voting forms - не нашел ничего подобного. Голос ставится один раз за все время, а мне нужно чтоб пользователь мог голосовать каждый день, но по 1 разу.

В http://xandeadx.ru/blog/drupal/668#comment-9052 недоработка закралась.
Флаг определил как псевдо-поле и только для одного типа ноды, сделал THEMENAME_preprocess_node() - всё работает для этой ноды. Но! В других нодах выводится просто "0", хотя этот флаг к ним не привязан и этого поля нет совсем. Оно и понятно - в приведённом коде никак это не отслеживается.

Как это можно исправить?

проверяйте $vars['type']

Точно! :) Благодарю

А подскажите, пожалуйста, есть способ ограничить кол-во голосов анонимных пользователей в голосовании при помощи rate + voting api? Заренее спасибо

Xandeadx, а как возможно вывести сколько анонимный пользователь пометил флагом нод? Пробовал через views связями, как-то не выходит.

делайте запрос в таблицу flagging

Вот только нюанс в том, что "разделить" для конкретного анонима никак. Почему-то поле sid (где я так понимаю должен быть id сессии) равно 0. Стоит модуль sessions api.

P.S. Стояла галочка "Глобальный тег". Спасибо за подсказку, полез в базу и сразу нашел косяк.

Не подскажите как выводить популярные (по количеству проголосовавших) материалы на главную, использую модули voting api и rate. В настройках views нет нужного фильтра (

смотрите в сортировке

Странно но там тоже нет даже намека на сортировку по кол-ву проголосовавших

xandead подскажи пожалуйста, что не так
в ноде вывод rate нормально работает print rate_embed($node, 'NAME', RATE_COMPACT);

а в комментах пробовал print rate_embed($comment, 'NAME', RATE_COMPACT); не хочет и выдает ошибку.

https://www.drupal.org/node/1625128
з.ы: пользуйтесь гуглом, прежде чем постить комменты с вопросами. это ведь не сложно

всегда так делаю сначала гугл :) ну видел я этот пост, там пишет именно не получилось, читал readme там про комменты ничего нету, после этого тут пост оставил

в общем решил, вывел содержимое массива content и print_r rate

Прошел год и ничего в лучшую сторону не изменилось.
Подбираю себе модуль по "Я здесь был!", "Хочу это видеть" ...
Rate - отличный удобный и функциональный модуль, но не работает с таксономией и похоже не будет работать, т.к. Рате2 заглох . Да и минус что полем не оформляется
Vote up/down - похоже в еще более глубоком деве стал
Plus1 - что-то сильно резаное.
Flag - ну а тут пилить и пилить походу

грустно...

что в флаге пилить?

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

а, ну и на сайте не только флажки нужны, но и +\-, и звездочки. Рейт потенциально все вопросы закрывал бы...

Попробовал Rate 2. Для таксономии работает, в виде поля работает, но настройки не понятны и все графические плюшки не доделаны. Да и как 5 звезд сделать стало не понятно...

Вопрос по модулю Flag. Подскажите пожалуйста, возможно ли вывести счетчик флагов ноды не за всё время, а за какой-либо период времени? Т.е. у меня есть вьюха которая выводит список нод со счетчиками (флагов), но эти счетчики за всё время, а как вывести список нод со счетчиками (флагов), например за последнюю неделю.

делайте запрос к таблице flagging или flag_counts

как же сделать лайк и дизлайк для ноды и комментов?
поставил модуль rate но, количество проголосовавших показывает 0, если нажать на лайк, то показывает реальное количество, перезагружаемся и опять ноль, что за бред?
поставил флаг, создал два флага, все вроде ок, но эти два флага должны работать в связке, либо один отмечени, либо второй, может это как -то можно сделать не сложно?
спасибо

2-й коммент не работал, в итоге вышло вот это
function HOOK_preprocess_node(&$vars) {

if (!isset($vars['content']['links']['flag']['#links']['flag-likenode'])) {
$flag_counters = flag_get_counts('node', $vars['nid']);
$vars['content']['links']['flag']['#links']['flag-likenode']['html'] = TRUE;
$vars['content']['links']['flag']['#links']['flag-likenode']['title'] = isset($flag_counters['likenode']) ? '
'.$flag_counters['likenode'].'
' : '
0
';
}
}
обертка флага как при выводе пользователя, ссылку можно весить любую (вход, регистрация)
Не могу понять как работала проверка if (!isset($vars['content']['flag_node_like'])) {
если так нет такого в массиве, возможно что-то обновилось
Остается вопрос поочередного переключения. Нашел это https://www.drupal.org/node/1213464 но не понятно как реализовать((

function firji_preprocess_node(&$vars) {
 
  if (!isset($vars['content']['links']['flag']['#links']['flag-likenode'])) {
    $flag_counters = flag_get_counts('node', $vars['nid']);
	$vars['content']['links']['flag']['#links']['flag-likenode']['html'] = TRUE;
    $vars['content']['links']['flag']['#links']['flag-likenode']['title'] = isset($flag_counters['likenode']) ? '<span class="flag-wrapper flag-likenode">
      <a href="#" title="" class="flag flag-action flag-link-toggle" rel="nofollow">'.$flag_counters['likenode'].'</a>
    </span>' : '<span class="flag-wrapper flag-likenode">
      <a href="#" title="" class="flag flag-action flag-link-toggle" rel="nofollow">0</a>
    </span>';
  }
}

выше порезалось вот

для комментов лайки гостям показываю так

function HOOK_preprocess_comment(&$vars) {
	if (!isset($vars['content']['links']['flag']['#links']['flag-likecomment'])) {
		$flag_counters = flag_get_counts('comment', $vars['comment']->cid);
		$vars['content']['links']['flag']['#links']['flag-likecomment']['html'] = TRUE;
		$vars['content']['links']['flag']['#links']['flag-likecomment']['title'] = isset($flag_counters['likecomment']) ? '
			<span class="flag-wrapper flag-likecomment">
				<a href="#" data-toggle="modal" data-target="#myLogin" title="Like" class="flag flag-action flag-link-toggle" rel="nofollow">'.$flag_counters['likecomment'].'</a>
			</span>' : '
			<span class="flag-wrapper flag-likecomment">
				<a href="#" data-toggle="modal" data-target="#myLogin" title="Like" class="flag flag-action flag-link-toggle" rel="nofollow">0</a>
			</span>';
	}
}

Flag, думаю самый лучший!
Большой функционал, удобно темизировать. Ссылку "Мне нравится" даже можно в отдельный шаблон flag.tpl.php темы засунуть.

Код в template.php подходит для обычных ссылок
При использовании js-ссылок, количество не будет обновляться.
Я поступил другим путем, в шаблоне флага "flag--{myflag}.tpl.php"
Добавил небольшой код
<?php
$flag_counters = flag_get_counts('node', $entity_id);
$link_text = isset($flag_counters['node_flag_like']) ? $flag_counters['node_flag_like'] : 0;
?>

Вывести список лайкнувших модуем Флаг - через вьюз релейшн флага - user flagged если флаг - global

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании