Ein Benutzer kann von einem anderen Benutzer bewertet werden, ich möchte nur eine Stimme zulassen. Ich habe mich entschieden, cookie zu verwenden, sobald eine Benutzerabstimmung ein Cookie gesetzt hat, wenn er die Seite aktualisiert, erhält der Benutzer eine Nachricht, die ihm sagt, dass er bereits bewertet hat.Mehrfache Bewertung verhindern
Das Problem ist, wenn der Benutzer versucht, einen anderen Benutzer zu bewerten, wird ihm eine Nachricht mitgeteilt, dass er bereits gewählt hat, aber er hat es noch nicht getan.
Ich verwende diese Sterne-Plugin: jQuery Raty
Dies ist, was getan hat:
StarRatingController.php
/**
* Return the result of rating action
*
* @return Response
*/
public function rateAction()
{
$request = $this->getRequest();
$contentId = (int)$request->request->get('contentId');
$score = (float)$request->request->get('score');
$starrating = $this->get('fly_starrating_service');
$average = $starrating->save($contentId, $score);
$response = new Response();
$cookie = new Cookie('star_rating', 'rated', time()+3600 * 3 , '/', null, false, false);
$response->headers->setCookie($cookie);
return $response->setContent($average);
}
UserShow.html.twig
{% if app.request.cookies.has('star_rating') %}
<p>You have already rated</p>
{{ render(controller("IdeatoStarRatingBundle:StarRating:alreadyRated", {contentId:entity.id})) }}
{% else %}
{{ render(controller("IdeatoStarRatingBundle:StarRating:displayRate", {contentId:entity.id})) }}
{% endif %}
Javascript
jQuery(function($){
$('.alreadyRated').raty({
path: '/symfony/web/bundles/ideatostarrating/images/',
score: function() {
return $(this).data('score');
},
readOnly: function() {
return true;//$(this).attr('data-readonly') == 'true'
},
click: function(score, evt) {
var t = $(this);
var url = t.data('route');
var data = {
contentId: t.data('contentid'),
score: score
};
t.raty('readOnly', true);
$.post(url, data)
.done(function(result){
t.raty('score', result);
t.trigger('isr-rated', { score: score, average: result });
})
.fail(function(){
alert('An error occurred. Please try again');
t.raty('readOnly', false);
});
}
});
});
Sie einfach in einer Datenbank speichern sollten die Benutzer eine andere gewählt hat Benutzer..? – Alex
Ja gute Idee, aber wie kann ich dem gleichen Benutzer erlauben, nach 3 Tagen den gleichen Benutzer zu wählen, für den er bereits gewählt hat? – Sirius
@Sirius, das ist eine andere Anforderung als ursprünglich gefordert. Aber es ist einfach zu machen. Etwas wie 'if ($ today> = $ lastVoteDay + 3) {...}'. Sie sollten in der Lage sein, das Datum der letzten Abstimmung aus Ihrer Datenbank abzurufen, oder? – Chris