-1
ユーザーは他のユーザーが評価することができます。投票を1回許可します。私はクッキーを使用することに決めました。ユーザーが投票したらブラウザにクッキーが設定されます。ページを更新すると、ユーザーは既に評価しているというメッセージを表示します。複数の評価を避ける
問題は、ユーザーが別のユーザーを評価しようとすると、既に投票しているが、彼はまだいないというメッセージが表示されます。 jQuery Raty
これはやっていることです:
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);
});
}
});
});
あなたは、単にユーザが他に投票したデータベースに保存してくださいユーザー..? – Alex
はい、いいアイデアですが、すでに投票している同じユーザーの3日後に同じユーザーに投票させるにはどうすればよいですか? – Sirius
@シリウス、それはあなたが最初に尋ねたものとは異なる要件です。しかし、それは簡単です。 'if($ today> = $ lastVoteDay + 3){...}'のようなものです。最新の投票日をデータベースから得ることができるはずですか? – Chris