Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Использую виджет http://demos.krajee.com/widget-details/star-rating
В БД есть поля
rating
и
votes
, чтобы сохранять кол-во голосов, кол-во общего рейтинга, а потом делить общий на кол-во голосов и выводить средний.
Как сохранять результат в БД? Я так понимаю, нужен отдельный роут для голосования, контроллер, а как со вьюхи ловить "клик"? AJAX?
Вот такой инпут есть, но планирую его вынести в отдельный blade, чтобы использовать в разных местах:
<input id="{{$input_id}}" value="{{$rating}}" type="number" class="rating" min=0 max=5 step=0.5 data-size="md">
<script>
$('#{{$input_id}}').rating({
starCaptions: {1: '', 2: '', 3: '', 4: '', 5: ''},
starCaptionClasses: {1: 'text-danger', 2: 'text-warning', 3: 'text-info', 4: 'text-primary', 5: 'text-success'},
clearElement: "#kv-clear",
captionElement: "#kv-caption"
}).on("rating.change", function(event, value, caption) {
var voted = false;
@if (Session::has()//проверка, голосовал ли пользователь
voted = true;
@endif
if (voted)
swal(":(", "Голосовать можно только один раз!", "warning");
else{
var total = value;
$.ajax({
url: src,
method: 'post',
data: {'total' : total, '_token' : $('input[name=_token]').val()},
success: function(res){
if (res == 1){
swal("", "Удачно!", "success");
voted = true;
}
else{
swal(":(", "Ошибка!", "warning");
}
}
});
}
});
$('.clear-rating').hide();
$('.caption').hide();
</script>
Контроллер:
if (\Session::has())
return 0;
if ($request->ajax()) {
$article = Blog::find();
$article->rating += $request->total;
$article->votes = $article->votes + 1;
$article->save();
session([$request->path() => 'true']);
return 1;
}
Изменено Tarasovych (12.05.2017 14:49:17)
Не в сети
Страницы 1