简化星级评分代码

时间:2015-10-22 10:26:57

标签: php html

我目前正在为网站制定评级系统,但我仍然坚持使用RAIN语言中的条件语句。我有两个问题:

  • 有没有办法让这段代码更有效率?
  • 这样离开会是一个问题,还是会降低网站的加载速度?

      <div class="product-rating">
    
        {% if (product.score * 5) < '1.3' %}
        <i class="fa fa-star"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
        {% endif %}
    
        {% if (product.score * 5) > '1.3' and (product.score * 5) < '1.7' %}
        <i class="fa fa-star"></i><i class="fa fa-star-half-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
        {% endif %}
    
        {% if (product.score * 5) > '1.7' and (product.score * 5) < '2.2' %}
        <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
        {% endif %}
    
        {% if (product.score * 5) > '2.2' and (product.score * 5) < '2.7' %}
        <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
        {% endif %}
    
        {% if (product.score * 5) > '2.7' and (product.score * 5) < '3.2' %}
        <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
        {% endif %}
    
        {% if (product.score * 5) > '3.2' and (product.score * 5) < '3.7' %}
        <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i><i class="fa fa-star-o"></i>
        {% endif %}
    
        {% if (product.score * 5) > '3.7' and (product.score * 5) < '4.2' %}
        <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-o"></i>
        {% endif %}
    
        {% if (product.score * 5) > '4.2' and (product.score * 5) < '4.7' %}
        <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i>
        {% endif %}
    
        {% if (product.score * 5) > '4.7' %}
        <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>
        {% endif %}
    
      </div>        
    

3 个答案:

答案 0 :(得分:0)

尝试这个(不确定是否存在语法问题,因为我在这里写了.. 我改变的是数字现在不是字符串,我不会跳过你为范围设置的所有数字。
使用elseif确认计算大于之前的IF。所以不应该有任何问题。 +这个计算分数* 5可以在IF语句如何出现之前进行。

<div class="product-rating">

    {% if (product.score * 5) < 1.3 %}
    <i class="fa fa-star"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
    {% elseif (product.score * 5) < 1.7 %}
    <i class="fa fa-star"></i><i class="fa fa-star-half-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
    {% elseif (product.score * 5) < 2.2 %}
    <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
    {% elseif (product.score * 5) < 2.7 %}
    <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
    {% elseif (product.score * 5) < 3.2 %}
    <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-o"></i><i class="fa fa-star-o"></i>
    {% elseif (product.score * 5) < 3.7 %}
    <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i><i class="fa fa-star-o"></i>
    {% elseif (product.score * 5) < 4.2 %}
    <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-o"></i>
    {% elseif (product.score * 5) < 4.7 %}
    <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i>
    {% else %}
    <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>
    {% endif %}

  </div> 

答案 1 :(得分:0)

这是一个使用for循环的方法。

&#13;
&#13;
<div class="product-rating">
  {% if (product.score * 5) < 1.3 %}
   <i class="fa fa-star"></i>
  {% endif %}

#  array = [1.3,2.2,3.2,4.2]
{% for item in array %}
  {% if if (product.score * 5) > item  %}
   <i class="fa fa-star"></i>
  {% elseif (product.score * 5) < (item + 0.5) %}
   <i class="fa fa-star-half-o"></i>
  {% endif %}
{% endfor %}


  {% if (product.score * 5) > 4.7 %}
   <i class="fa fa-star"></i>
  {% endif %}
</div> 
&#13;
&#13;
&#13;

答案 2 :(得分:0)

最好实现一个绘制分数的函数,比如没有模板化

function drawScore($score){
    $solid = floor($score);
    $empty = 4 - $solid;
    $half =  $score - $solid;
    for($i = 1; $i <= $solid; $i++){
        echo '<i class="fa fa-star"></i>';
    }
    if($half > 0){
        echo '<i class="fa fa-star-half-o"></i>';
    }
  for($j = 0; $j < $empty; $j++){
    echo '<i class="fa fa-star-o"></i>';
  }
}

然后你在<div class="product-rating">内所需要的只是调用函数:

$pScore = $product.score * 5;
drawScore($pScore);