Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 12.05.2017 14:41:12

Как сделать звездный рейтинг?

Использую виджет 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)

Не в сети

Подвал раздела