IS_VOTED?

Организовать проверку на проголосованность юзера.

#1 6 февраля 2015 в 16:24
Создал новый компонент для сайта. Ну как создал… переделал уже имеющийся компонент FAQ. Организовал в нем голосовалку с оценками каждого вопроса по пятибалльной шкале, все работает, но таки остался один вопрос, как проверить юзера на проголосованность по данному вопросу?
После обновления страницы юзер снова видит меню голосования… хоть оно у него больше и не работает.
То есть нужно организовать выборку из cms_rating и в случае совпадения выдавать этому юзеру is_voted = true и не показывать ему меню голосовалки.

Кто подскажет, как это можно организовать? Пробовал скопировать процедуру из comments, почему-то не работает.
#2 6 февраля 2015 в 17:13
Понимать бы еще какой код у вас)
А вообще, как вариант, можно запоминать по каким вопросам проголосовал юзер. Например отдельной таблицей, и соответсвенно при выдаче формы для голосования проверять, проголосовал ли юзер или нет в этом вопросе
#3 6 февраля 2015 в 18:20
Rossoman,
На действующем сайте так и сделано. Отдельная таблица cms_vote_faq и отдельный рейтинг по вопросам. Отдельные лидеры в общем рейтинге и отдельные в "дополнительном".
Решил свести весь рейтинг в одну кучу. И все работает нормально! Единственная проблема — как не показывать голосовалку уже проголосовавшим?

А код приблизительно такой:

  1. {if $quest.button==0 && $is_user && $is_user!=$quest.user_id && $quest.button_y==0}
  2. <!-- оценки-->
  3. <div id=vote_anec{$quest.id} >
  4.  
  5. {if !$is_user || $quest.is_voted}
  6. <span class="cmm_votes">
  7. {if $quest.rating>0}
  8. <span class="cmm_good">+{$quest.rating}</span>
  9. {elseif $quest.rating<0}
  10. <span class="cmm_bad">{$quest.rating}</span>
  11. {else}
  12. {$quest.rating}
  13. {/if}
  14. </span>
  15. {else}
  16. <span class="cmm_votes" id="votes{$quest.id}">
  17. <table border="0" cellpadding="0" cellspacing="0"><tr>
  18. <td>{$quest.rating|rating}</td>
  19. <td><a href="javascript:void(0);" onclick="voteQuest({$quest.id}, -5);" title="{$LANG.BAD_5}"><img border="0" alt="-" src="/templates/{template}/images/icons/comments/vote-5.gif" style="margin-left:8px"/></a></td>
  20. <td><a href="javascript:void(0);" onclick="voteQuest({$quest.id}, -3);" title="{$LANG.BAD_3}"><img border="0" alt="-" src="/templates/{template}/images/icons/comments/vote-3.gif" style="margin-left:2px"/></a></td>
  21. <td><a href="javascript:void(0);" onclick="voteQuest({$quest.id}, -1);" title="{$LANG.BAD_1}"><img border="0" alt="-" src="/templates/{template}/images/icons/comments/vote-1.gif" style="margin-left:2px"/></a></td>
  22. <td><a href="javascript:void(0);" onclick="voteQuest({$quest.id}, 1);" title="{$LANG.GOOD_1}"><img border="0" alt="+" src="/templates/{template}/images/icons/comments/vote+1.gif" style="margin-left:2px"/></a></td>
  23. <td><a href="javascript:void(0);" onclick="voteQuest({$quest.id}, 3);" title="{$LANG.GOOD_3}"><img border="0" alt="+" src="/templates/{template}/images/icons/comments/vote+3.gif" style="margin-left:2px"/></a></td>
  24. <td><a href="javascript:void(0);" onclick="voteQuest({$quest.id}, 5);" title="{$LANG.GOOD_5}"><img border="0" alt="+" src="/templates/{template}/images/icons/comments/vote+5.gif" style="margin-left:2px"/></a></td>
  25. </tr></table>
  26. </span>
  27. {/if}
  28.  
  29. </div>
  30. {/if}
#4 6 февраля 2015 в 19:30
я ж говорю, запоминайте в базу тех кто проголосовал, и при выдаче голосовалки, проводите проверку
#5 6 февраля 2015 в 19:59
Rossoman,
Так я и говорю. Они ж запомнены все в cms_rating. Как их вытащить оттуда и не показывать голосовалку снова?
Генерация is_voted стандартными методами не работает, Как еще можно отследить проголосованность юзера?
#6 6 февраля 2015 в 20:15
тогда вообще не понимаю в чем проблема?
перед выводом голосовалки, проверяйте, голосовал ли этот юзер или нет
  1.  
  2. if(юзер не голосовал){
  3. выводим голосовалку
  4. }
  5.  
#7 6 февраля 2015 в 20:20

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

Rossoman
Гениально! Я как раз и спрашиваю, как это сделать.
То есть как сделать так, чтобы генерировалось user.is_voted.
Я не понимаю в php вообще ничего. Оперирую только обычной логикой.
#8 6 февраля 2015 в 20:22

Гениально! Я как раз и спрашиваю, как это сделать.

HiAndy
Вы вопрос то поставьте правильно.
Я вам уже несколько раз написал как не показывать голосовалку проголосовавшему.
У вас проблема заключается в написании кода? Вам нужно предоставить готовое решение, то есть написать код?
#9 6 февраля 2015 в 20:25

Вам нужно предоставить готовое решение, то есть написать код?

Rossoman
Да.
Мне нужно написать код, как отличить голосовавшего юзера от неголосовавшего.
#10 6 февраля 2015 в 20:28

Мне нужно написать код, как отличить голосовавшего юзера от неголосовавшего.

HiAndy
Не зная структуры базы, никто вам не поможет.
И как вы вообще написали компонент, если не можете вытащить значение из базы?
#11 6 февраля 2015 в 20:36

И как вы вообще написали компонент, если не можете вытащить значение из базы?

Rossoman
Я не написал компонент, а создал новый компонент из компонента faq. Тупо переименовал все переменные из faq в anec. И это всё работает, как ни странно. То есть вместо вопросов теперь можно размещать шутки\анекдоты\афоризмы\истории и голосовать за это по десятибалльной (да хоть сколькоугоднобалльной) шкале. Голосовалка тупо взята из comments и дополнена. Единственно, что не работает — различение голосовавших юзеров от неголосовавших.

Не зная структуры базы, никто вам не поможет.

Rossoman
В таблицу cms_faq_quests был тупо добавлен столбец rating. А в таблицу cms_rating_targets тупо добавлен столбец quests.

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

Rossoman
Еще раз переосмыслил всё сказанное.
На самом деле, мне нужно просто разъяснить, как различаются проголосовавшие и неголосовавшие юзеры в компонентах comments и forum.
#12 6 февраля 2015 в 20:53
Скажите, каким образом у Вас запоминаются в базе юзеры которые проголосовали? Как называется столбец с проголосовавшими юзерами?
#13 6 февраля 2015 в 21:18

Скажите, каким образом у Вас запоминаются в базе юзеры которые проголосовали? Как называется столбец с проголосовавшими юзерами?

Rossoman
Также, как и юзеры проголосовавшие за комментарии.
В Таблице cms_faq_quests добавлен столбец rating. В этом столбце указывается рейтинг вопроса в соотношении к id вопроса. user_id там не учитывается никак.


Но, в таблице cms_ratings голоса учитываются.

Нужно просто изъять соответствие item_id и user_id из таблицы cms_ratings и в случае совпадения не показывать юзеру голосовалку.
В комментариях это как-то же работает.

Причем видно в каких файлах производится выборка из cms_ratings

И, что интересно в форумах нигде выборка из cms_ratings не используется, хотя там тоже есть голосование за посты!
Следовательно, различение голосовавших от неголосовавших происходит где-то в файле \core\lib_karma.php

Вопрос, как эти данные оттуда выцарапать?
#14 6 февраля 2015 в 21:44
Чтобы проверить юзера на проголосованность, нужно сделать еще одно поле, и запоминать туда id каждого проголосовавшего юзера через запятую. Либо сделать отдельную таблицу, и запоминать туда в каждую новую запись юзера, проголосовавшего за тот или иной вопрос.
Я бы сделал так. Может кто то подскажет как это реализовать по другому.
Но я других вариантов не вижу
#15 6 февраля 2015 в 21:58
Rossoman,
Сделать еще одно поле в таблице cms_faq_quests?
Но за каждый вопрос голосуют десятки юзеров. И их через запятую в одно поле?
Голосование за комментарии в точности такое же. Как там различаются проголосовавшие юзеры? В таблице cms_comments никакого дополнительного поля нет.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.