Организовать проверку на проголосованность юзера.
После обновления страницы юзер снова видит меню голосования… хоть оно у него больше и не работает.
То есть нужно организовать выборку из cms_rating и в случае совпадения выдавать этому юзеру is_voted = true и не показывать ему меню голосовалки.
Кто подскажет, как это можно организовать? Пробовал скопировать процедуру из comments, почему-то не работает.
А вообще, как вариант, можно запоминать по каким вопросам проголосовал юзер. Например отдельной таблицей, и соответсвенно при выдаче формы для голосования проверять, проголосовал ли юзер или нет в этом вопросе
На действующем сайте так и сделано. Отдельная таблица cms_vote_faq и отдельный рейтинг по вопросам. Отдельные лидеры в общем рейтинге и отдельные в "дополнительном".
Решил свести весь рейтинг в одну кучу. И все работает нормально! Единственная проблема — как не показывать голосовалку уже проголосовавшим?
А код приблизительно такой:
{if $quest.button==0 && $is_user && $is_user!=$quest.user_id && $quest.button_y==0} <!-- оценки--> <div id=vote_anec{$quest.id} > {if !$is_user || $quest.is_voted} <span class="cmm_votes"> {if $quest.rating>0} <span class="cmm_good">+{$quest.rating}</span> {elseif $quest.rating<0} <span class="cmm_bad">{$quest.rating}</span> {else} {$quest.rating} {/if} </span> {else} <span class="cmm_votes" id="votes{$quest.id}"> <table border="0" cellpadding="0" cellspacing="0"><tr> <td>{$quest.rating|rating}</td> <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> <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> <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> <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> <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> <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> </tr></table> </span> {/if} </div> {/if}
Так я и говорю. Они ж запомнены все в cms_rating. Как их вытащить оттуда и не показывать голосовалку снова?
Генерация is_voted стандартными методами не работает, Как еще можно отследить проголосованность юзера?
перед выводом голосовалки, проверяйте, голосовал ли этот юзер или нет
if(юзер не голосовал){ выводим голосовалку }
Гениально! Я как раз и спрашиваю, как это сделать.перед выводом голосовалки, проверяйте, голосовал ли этот юзер или нет
То есть как сделать так, чтобы генерировалось user.is_voted.
Я не понимаю в php вообще ничего. Оперирую только обычной логикой.
Вы вопрос то поставьте правильно.Гениально! Я как раз и спрашиваю, как это сделать.
Я вам уже несколько раз написал как не показывать голосовалку проголосовавшему.
У вас проблема заключается в написании кода? Вам нужно предоставить готовое решение, то есть написать код?
Да.Вам нужно предоставить готовое решение, то есть написать код?
Мне нужно написать код, как отличить голосовавшего юзера от неголосовавшего.
Не зная структуры базы, никто вам не поможет.Мне нужно написать код, как отличить голосовавшего юзера от неголосовавшего.
И как вы вообще написали компонент, если не можете вытащить значение из базы?
Я не написал компонент, а создал новый компонент из компонента faq. Тупо переименовал все переменные из faq в anec. И это всё работает, как ни странно. То есть вместо вопросов теперь можно размещать шутки\анекдоты\афоризмы\истории и голосовать за это по десятибалльной (да хоть сколькоугоднобалльной) шкале. Голосовалка тупо взята из comments и дополнена. Единственно, что не работает — различение голосовавших юзеров от неголосовавших.И как вы вообще написали компонент, если не можете вытащить значение из базы?
В таблицу cms_faq_quests был тупо добавлен столбец rating. А в таблицу cms_rating_targets тупо добавлен столбец quests.Не зная структуры базы, никто вам не поможет.
Еще раз переосмыслил всё сказанное.У вас проблема заключается в написании кода? Вам нужно предоставить готовое решение, то есть написать код?
На самом деле, мне нужно просто разъяснить, как различаются проголосовавшие и неголосовавшие юзеры в компонентах comments и forum.
Также, как и юзеры проголосовавшие за комментарии.Скажите, каким образом у Вас запоминаются в базе юзеры которые проголосовали? Как называется столбец с проголосовавшими юзерами?
В Таблице cms_faq_quests добавлен столбец rating. В этом столбце указывается рейтинг вопроса в соотношении к id вопроса. user_id там не учитывается никак.
Но, в таблице cms_ratings голоса учитываются.
В комментариях это как-то же работает.
Причем видно в каких файлах производится выборка из cms_ratings
Следовательно, различение голосовавших от неголосовавших происходит где-то в файле \core\lib_karma.php
Вопрос, как эти данные оттуда выцарапать?
Я бы сделал так. Может кто то подскажет как это реализовать по другому.
Но я других вариантов не вижу
Сделать еще одно поле в таблице cms_faq_quests?
Но за каждый вопрос голосуют десятки юзеров. И их через запятую в одно поле?
Голосование за комментарии в точности такое же. Как там различаются проголосовавшие юзеры? В таблице cms_comments никакого дополнительного поля нет.