Звездный рейтинг с поддержкой полузвезды - PullRequest
0 голосов
/ 05 января 2019

У меня проблема с отображением звездного рейтинга, и я надеялся, что смогу получить дополнительные глазные яблоки для своей проблемы. У меня нормальная оценка, которая отлично работает с целыми числами, но я изо всех сил пытаюсь показать половину звезды. Например, я создал сервис, который предоставляет мне рейтинг 0-5, поэтому я получаю значение, например, 2,5, 3 или 5 и т. Д. *

Прежде чем я пойду и создам коммутатор и создаю SVG для каждого варианта, я надеялся получить небольшой указатель. Ниже то, что я имею в настоящее время, любые советы будут с благодарностью.

<?php
     for ($i = 1; $i <= $totalRating; $i++) {
     if($starRating < $i ) {
        echo "<img src=\"/icons/star-empty.svg\">";
      }
      else {
        echo "<img src=\"/icons/star.svg\">";
      }
    }
?>

В идеале я хотел бы добавить условие в конце цикла и проверить половину и эхо "";

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Вы можете проверить, является ли значение $ starRating целым числом, выполнив что-то вроде этого (учитывая только половину значений):

<?php
     for ($i = 1; $i <= $totalRating; $i++) {
     if ($starRating < $i ) {
        echo "<img src=\"/icons/star-empty.svg\">";
     } elseif(is_int($starRating) === false) {
        echo "<img src=\"/icons/star_half.svg\">";
     } else {
        echo "<img src=\"/icons/star.svg\">";
      }
    }
?>

Если вы хотите показать звезды с более точным значением, вы можете создать изображения со значениями с плавающей точкой в ​​названии, например "star-3.svg" (представляющих значение с плавающей точкой .3, и сделать как то так:

<?php
     for ($i = 1; $i <= $totalRating; $i++) {
     if ($starRating < $i ) {
        echo "<img src=\"/icons/star-empty.svg\">";
     } elseif(is_int($starRating) === false) {
        echo "<img src=\"/icons/star-" . floatval($starRating)) . ".svg\">";
     } else {
        echo "<img src=\"/icons/star.svg\">";
      }
    }
?>

Но в этом случае вам нужно позаботиться о том, чтобы получать значения с плавающей запятой только с одним номером (2.2, 3.4 и т. Д.).

Надеюсь, это поможет ...

0 голосов
/ 05 января 2019

Вероятно, есть более простой способ сделать это, но это работает, проверяет, является ли $starRating плавающей точкой, а затем округляет его и проверяет против $i, чтобы установить половину звезды в правильном положении.

<?php
$totalRating = 5;
$starRating = 2.5;

for ($i = 1; $i <= $totalRating; $i++) {
     if($starRating < $i ) {
        if(is_float($starRating) && (round($starRating) == $i)){
            echo "<img src=\"/icons/star-half.svg\">";
        }else{
            echo "<img src=\"/icons/star-empty.svg\">";
        }
     }else {
        echo "<img src=\"/icons/star.svg\">";
     }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...