d0ublezer0

Дробный цикл

Recommended Posts

Помогите с куском кода, плз. Голова сломалась. Понимаю, что просто, но не вижу как )

Задача выводить 5 звезд, рейтинга. Каждая может быть включена полностью, включена наполовину или выключена

$sscore     = 3.5;
for ($i = 0.5; $i <= 5; $i += 0.5)
{
	if ($i < $sscore) $star_class = "star-on";
	if ($i == $sscore && is_int($sscore)) $star_class = "star-on";
	if ($i == $sscore && is_float($sscore)) $star_class = "star-half";
	if ($i > $sscore) $star_class = "star-off";
	if ($i == intval($i) || $i == $sscore && is_float($sscore))
	{
		echo "<i class='$star_class'></i>";
	}
}

если оставить intval то выводится 5 звезд, но полу-звезда не показывается, а с моим условием - отображается одна звезда лишняя

Edited by d0ublezer0

Share this post


Link to post
Share on other sites

А если так?
 

$step = 0.5;
$sscode     = '3.5';
for ($i = 1; $i <= 5; $i += 1)
{
  $star_class = '';
  if($sscode >= $i) $star_class = 'star-on';
  else if($sscode >= ($i-$step)) $star_class = 'star-half';
  else $star_class = 'star-off';
  echo '<i class='.$star_class.'></i>';
}

 

Share this post


Link to post
Share on other sites
3 часа назад, Switch74 сказал:

А если так?

Так не сработало (проверял первый опубликованный вариант, второй исправленный не тестировал)

Сделал так:

$sscore = $comment->rating/2;
$int_score = floor($sscore);
for ($i = 1; $i <= 5; $i++)
{
	if ($i <= $sscore) $star_class = "fa-star fa-star--on";
	if ($i > $sscore) $star_class = "fa-star-o fa-star--off";
	if ($i == $int_score && $sscore > $i) $star_class = "fa-star fa-star-half-o";
	echo "<i class='fa fa-fw $star_class'></i>";
}

 

Edited by d0ublezer0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Member Statistics

    46,434
    Total Members
    3,128
    Most Online
    Sterben
    Newest Member
    Sterben
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Спрашивают сейчас

  • Пишут сейчас

    • Если свойства нет в спецификации, то откуда его возьмет браузер? Даже если в каком то одном из браузеров введут это свойство то смысла его использовать все-равно не будет, так как в остальных оно работать не будет 🙂   Тогда бардак творился, DHTML, разные объектные модели и все дела. У netscape действительно была такая фича. Хотя не факт что она работала. Вот тут https://www.uv.es/jordi/v3/html/dynhtml/dynamic.pdf можно увидеть что float:center; присутствует в коде, но следом написано что элементы можно выровнять с помощью float слева или справа, или с помощью js по центру. Также в книге указаны допустимые значения для float - left, right, none. Так что это скорее всего была запланированная возможность, которая не получила реализации.
    • Если бы с html и css, все браузеры строго соответствовали спецификациям) Да статье около десятка лет, а то и более. Вот я тоже склоняюсь к тому, что это ошибка. но эта лекция была написана даже с учётом ещё живого на тот момент netscape navigator. Может быть он позволял интерпретировать такую конструкцию. В описании автор указывает, что так блок становится обтекаемым с двух сторон.
    • Может с clear путаете? Или в статье спутали. Наверно, древняя?
      http://htmlbook.ru/css/clear
  • Popular Contributors