Создал новый компонент для сайта. Ну как создал… переделал уже имеющийся компонент FAQ. Организовал в нем голосовалку с оценками каждого вопроса по пятибалльной шкале, все работает, но таки остался один вопрос, как проверить юзера на проголосованность по данному вопросу?
После обновления страницы юзер снова видит меню голосования… хоть оно у него больше и не работает.
То есть нужно организовать выборку из cms_rating и в случае совпадения выдавать этому юзеру is_voted = true и не показывать ему меню голосовалки.
Кто подскажет, как это можно организовать? Пробовал скопировать процедуру из comments, почему-то не работает.
Организовать проверку на проголосованность юзера.
#1
6 февраля 2015 в 16:24
#2
6 февраля 2015 в 17:13
Понимать бы еще какой код у вас)
А вообще, как вариант, можно запоминать по каким вопросам проголосовал юзер. Например отдельной таблицей, и соответсвенно при выдаче формы для голосования проверять, проголосовал ли юзер или нет в этом вопросе
А вообще, как вариант, можно запоминать по каким вопросам проголосовал юзер. Например отдельной таблицей, и соответсвенно при выдаче формы для голосования проверять, проголосовал ли юзер или нет в этом вопросе
#3
6 февраля 2015 в 18:20
Rossoman,
На действующем сайте так и сделано. Отдельная таблица cms_vote_faq и отдельный рейтинг по вопросам. Отдельные лидеры в общем рейтинге и отдельные в "дополнительном".
Решил свести весь рейтинг в одну кучу. И все работает нормально! Единственная проблема — как не показывать голосовалку уже проголосовавшим?
А код приблизительно такой:
На действующем сайте так и сделано. Отдельная таблица 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}
Сегодня в 11:04
#4
6 февраля 2015 в 19:30
я ж говорю, запоминайте в базу тех кто проголосовал, и при выдаче голосовалки, проводите проверку
#5
6 февраля 2015 в 19:59
Rossoman,
Так я и говорю. Они ж запомнены все в cms_rating. Как их вытащить оттуда и не показывать голосовалку снова?
Генерация is_voted стандартными методами не работает, Как еще можно отследить проголосованность юзера?
Так я и говорю. Они ж запомнены все в cms_rating. Как их вытащить оттуда и не показывать голосовалку снова?
Генерация is_voted стандартными методами не работает, Как еще можно отследить проголосованность юзера?
#6
6 февраля 2015 в 20:15
тогда вообще не понимаю в чем проблема?
перед выводом голосовалки, проверяйте, голосовал ли этот юзер или нет
перед выводом голосовалки, проверяйте, голосовал ли этот юзер или нет
if(юзер не голосовал){ выводим голосовалку }
Гениально! Я как раз и спрашиваю, как это сделать.перед выводом голосовалки, проверяйте, голосовал ли этот юзер или нет
То есть как сделать так, чтобы генерировалось user.is_voted.
Я не понимаю в php вообще ничего. Оперирую только обычной логикой.
#8
6 февраля 2015 в 20:22
Вы вопрос то поставьте правильно.Гениально! Я как раз и спрашиваю, как это сделать.
Я вам уже несколько раз написал как не показывать голосовалку проголосовавшему.
У вас проблема заключается в написании кода? Вам нужно предоставить готовое решение, то есть написать код?
#9
6 февраля 2015 в 20:25
Да.Вам нужно предоставить готовое решение, то есть написать код?
Мне нужно написать код, как отличить голосовавшего юзера от неголосовавшего.
#10
6 февраля 2015 в 20:28
Не зная структуры базы, никто вам не поможет.Мне нужно написать код, как отличить голосовавшего юзера от неголосовавшего.
И как вы вообще написали компонент, если не можете вытащить значение из базы?
Я не написал компонент, а создал новый компонент из компонента faq. Тупо переименовал все переменные из faq в anec. И это всё работает, как ни странно. То есть вместо вопросов теперь можно размещать шутки\анекдоты\афоризмы\истории и голосовать за это по десятибалльной (да хоть сколькоугоднобалльной) шкале. Голосовалка тупо взята из comments и дополнена. Единственно, что не работает — различение голосовавших юзеров от неголосовавших.И как вы вообще написали компонент, если не можете вытащить значение из базы?
В таблицу cms_faq_quests был тупо добавлен столбец rating. А в таблицу cms_rating_targets тупо добавлен столбец quests.Не зная структуры базы, никто вам не поможет.
Еще раз переосмыслил всё сказанное.У вас проблема заключается в написании кода? Вам нужно предоставить готовое решение, то есть написать код?
На самом деле, мне нужно просто разъяснить, как различаются проголосовавшие и неголосовавшие юзеры в компонентах comments и forum.
#12
6 февраля 2015 в 20:53
Скажите, каким образом у Вас запоминаются в базе юзеры которые проголосовали? Как называется столбец с проголосовавшими юзерами?
Также, как и юзеры проголосовавшие за комментарии.Скажите, каким образом у Вас запоминаются в базе юзеры которые проголосовали? Как называется столбец с проголосовавшими юзерами?
В Таблице 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 никакого дополнительного поля нет.
Сделать еще одно поле в таблице cms_faq_quests?
Но за каждый вопрос голосуют десятки юзеров. И их через запятую в одно поле?
Голосование за комментарии в точности такое же. Как там различаются проголосовавшие юзеры? В таблице cms_comments никакого дополнительного поля нет.