делаем like и dislike для ноды

Главные вкладки

Аватар пользователя mozh mozh 24 июля 2015 в 14:21

Потребовалось создать лайки и дизлайки для ноды.
Создаем два флага с помощью модуля Flag
Один назовем likenode, второй dislikenode))
Flag link text можем установить с помощью токена количества так: Like [node:flag-likenode-count]
Link type: JavaScript toggle
Не забываем указать тип материала где будут показываться флаги
аналогично создаем dislikenode
В итоге на странице ноды получим два флага, но нужно чтобы пользователь мог установить только один из них, как радиокнопки
подключаем к вашему шаблону скрипт js в .info
scripts[] = script.js
и в его следующий код

(function ($) {
  Drupal.behaviors.like_dislike = {
    attach: function (context, settings) {
          //click like button
          $('.flag-likenode a').click(function(){
                if($('.flag-dislikenode a.unflag-action').length > 0){
                        $('.flag-dislikenode a').click();
                }
          });
          //click dislike
          $('.flag-dislikenode a').click(function(){
                if($('.flag-likenode a.unflag-action').length > 0){
                        $('.flag-likenode a').click();
                }
          });
    }
  };
})(jQuery);

Теперь если вы поставили флаг like, а после dislike, то будем имитировано нажатие на like и он снимется
Если есть предложения получше, готов выслушать!
rules + ajax flag не работают

Комментарии

Аватар пользователя mozh mozh 24 июля 2015 в 15:03

Lotar wrote:
Вы любите изобретать велосипеды.

выслушаю предложения, можно как то сделать с флагами иначе?

Аватар пользователя mozh mozh 24 июля 2015 в 15:43

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

Аватар пользователя mozh mozh 31 июля 2015 в 14:14

просто модуль флага уже используется на сайте для подписок на пользователя и закладок. Поэтому хотелось бы сделать и лайки с помощью его
я нашел что-то похожее https://www.drupal.org/node/1213464 но не выходит это повторить
с помощью rules добавил два правила
Если нажали лайк и уже стоит дизлайк, то снять дизлайк
{ "rules_click_like_shoot_dislike" : {
"LABEL" : "Click like, shoot dislike",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "flag" ],
"ON" : { "flag_flagged_likenode" : [] },
"DO" : [
{ "flag_unflagnode" : {
"flag" : "dislikenode",
"node" : [ "flagged-node" ],
"flagging_user" : [ "flagging_user" ],
"permission_check" : "1"
}
}
]
}
}
И еще один
Если нажали дизлайк и уже стоит лайк, то снять лайк
{ "rules_click_dislike" : {
"LABEL" : "Click dislike",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "flag" ],
"ON" : { "flag_flagged_dislikenode" : [] },
"DO" : [
{ "flag_unflagnode" : {
"flag" : "likenode",
"node" : [ "flagged-node" ],
"flagging_user" : [ "flagging_user" ],
"permission_check" : "1"
}
}
]
}
}
Осталась проблема с реальным отображением флагов на странице, ведь они с ajax работают. В БД поидеи все теперь будет гарантировано правильно