Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Возможно ли на Битрикс сделать популярность в виде звезд?

00 голосов
3
Добрый День всем!

Подскажите нНеоачинающему программисту, необходимо сделать графу популярность, оцениваться будет по 5-ой шкале, тоесть максимум 5 звезд может быть.

Как это можно сделать на Битрикс, может есть какие стандартные компоненты?
спросил 18 Янв, 14 от Chemikals (840 баллов)

3 Ответы

00 голосов
да есть. для рейтинга элементов инфоблоков - компонент "Голосование (bitrix:iblock.vote)".
ответил 06 Май, 14 от Texnik (1,860 баллов)
00 голосов
Только учтите, что штатная реализация не защищена от повторного голосования (накруток).
ответил 01 Сен, 14 от LediDrak (180 баллов)
00 голосов
Нашел такой хороший скрипт,

Код
<script type="text/javascript">
if(!window.voteScript) window.voteScript =
{
   trace_vote: function(div, flag)
   {
      var my_div;
      var r = div.id.match(/^vote_(\d+)_(\d+)$/);
      for(var i = r[2]; i >= 0; i--)
      {
         my_div = document.getElementById('vote_'+r[1]+'_'+i);
         if(my_div)
         {
            if(flag)
            {
               if(!my_div.saved_class)
                  my_div.saved_className = my_div.className;
               if(my_div.className!='star-active star-over')
                  my_div.className = 'star-active star-over';
            }
            else
            {
               if(my_div.saved_className && my_div.className != my_div.saved_className)
                  my_div.className = my_div.saved_className;
            }
         }
      }
      i = r[2]+1;
      while(my_div = document.getElementById('vote_'+r[1]+'_'+i))
      {
         if(my_div.saved_className && my_div.className != my_div.saved_className)
            my_div.className = my_div.saved_className;
         i++;
      }
   },
      do_vote: function(div, parent_id, arParams)
   {
      var r = div.id.match(/^vote_(\d+)_(\d+)$/);

      var vote_id = r[1];
      var vote_value = r[2];

      function __handler(data)
      {
         var obContainer = document.getElementById(parent_id);
         if (obContainer)
         {
            
            var obResult = document.createElement("DIV");
            obResult.innerHTML = data;
            obContainer.parentNode.replaceChild(obResult.firstChild, obContainer);
         }
      }

      PShowWaitMessage('wait_' + parent_id, true);

            var url = '/bitrix/components/bitrix/iblock.vote/component.php'

            arParams['vote'] = 'Y';
      arParams['vote_id'] = vote_id;
      arParams['rating'] = vote_value;

      var TID = CPHttpRequest.InitThread();
      CPHttpRequest.SetAction(TID, __handler);
            CPHttpRequest.Post(TID, url, arParams);
         }
}
</script>


Вообщем суть такая, создаем обычную табличку и в каждом теге <td> вставляем <div> естественно со своим классом и обработчиком события для рейтинга
Код
onmouseover="voteScript.trace_vote(this, true);" onmouseout="voteScript.trace_vote(this, false)" onclick="voteScript.do_vote(this, 'vote_134'.......


что-то типа того

Но почему-то не хочет работать... подскажите в чем может быть причина?
ответил 07 Янв, 15 от Chemikals (840 баллов)

Похожие вопросы

0 голосов
5 ответов
спросил 11 Дек, 13 от IoOI (100 баллов)
0 голосов
2 ответов
спросил 12 Апр, 14 от Charlize (100 баллов)
0 голосов
2 ответов
спросил 08 Апр, 14 от EDKA (980 баллов)
0 голосов
8 ответов
0 голосов
1 ответ