Laravel: выходное значение в виде звездного рейтинга - PullRequest
0 голосов
/ 14 апреля 2020

Итак, у меня есть система отзывов, которая будет принимать отзывы пользователей об отеле. Мне удалось включить в нее систему звездных рейтингов. Система звездного рейтинга работает и будет хранить значение от 1 до 5 в базе данных. Теперь, когда я нажму на отзывы, я смогу увидеть все отзывы от пользователя. Тем не менее, когда я нажимаю на отзывы, я не могу увидеть рейтинг звезды, которая отображается. Как мне удастся отобразить звездный рейтинг в обзоре:

Show.blade. php

   {{Form::label('rating', 'Rating')}}
 <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font- 
   awesome/5.13.0/css/all.min.css">
  <form>
  <input type="radio" class="star-input" name="rating" id="star-1" value="1">
  <label for="star-1" class="star"><i class="fas fa-star"></i></label>
  <input type="radio" class="star-input" name="rating" id="star-2" value="2">
  <label for="star-2" class="star"><i class="fas fa-star"></i></label>
  <input type="radio" class="star-input" name="rating" id="star-3" value="3">
  <label for="star-3" class="star"><i class="fas fa-star"></i></label>
  <input type="radio" class="star-input" name="rating" id="star-4" value="4">
  <label for="star-4" class="star"><i class="fas fa-star"></i></label>
  <input type="radio" class="star-input" name="rating" id="star-5" value="5" 
  checked>
<label for="star-5" class="star"><i class="fas fa-star"></i></label>

 </form>
{{Form::Submit('submit', ['class' => 'btn btn-primary'])}}
{!! Form::close() !!}


    @if(count($review) > 1)
    @foreach($review as $reviews)
        <div class= "well"> 
            <h3><a href="/reviews/{{$reviews->title}}">{{$reviews->title}} </a>

    @for($i = 0; $i < 5; $i++)
      @if($i <= $reviews->rating)
        <label for="star-5" class="star">
        <i class="fas fa-star"span class="star star--gold"></span></i>
        </label>
      @else
      @endif
    @endfor

Как видите, у меня {{$ reviews-> rating} } который atm отображает значение 1-5. Как я буду отображать настоящую звезду?

1 Ответ

1 голос
/ 14 апреля 2020

Для вывода звездочек в ваших шаблонах вы можете сделать следующее в примере ниже. Но сначала небольшая заметка о вашем использовании переменной: попробуйте сделать любые массивы отзывов множественными и один обзор по отдельности. Так что $reviews для всех обзоров и одного отзыва $review. Это делает ваш код более читабельным и понятным для вас и других.

Таким образом, ваше свойство $review->rating является числом. Когда число равно 3, вы хотите показать 3 звезды с правильным стилем.

Используйте al oop для вывода 5 звезд. Внутри этого l oop посмотрите, является ли индекс текущей звезды ниже или равен номинальному значению. Когда это так, это означает, что текущая звезда должна быть частью рейтинга. А если это не так, это означает, что эта звезда должна быть серого цвета или иметь другой стиль.

Это приведет к тому, что все звезды, которые должны быть золотыми, будут иметь класс star--gold, который можно соответственно стилизовать. .

@if(count($reviews) > 1)
  @foreach($reviews as $review)

    <div class= "well"> 
      <h3>
        <a href="/reviews/{{ $review->title }}">{{ $review->title }}</a>

        @for ($i = 0; $i < 5; $i++)
          @if ($i < $review->rating)
            <span class="star star--gold"></span>
          @else
            <span class="star"></span>
          @endif
        @endfor

      </h3>
      <small>{{ $review->created_at }}</small>
      <br>
      <small>{{ $review->body }}</small> 
      <br>
      <br>
    </div>

  @endforeach
@else
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...