2016-11-07 4 views
0

У меня есть 5-точечная рейтинговая система. Я пытаюсь изменить, как она отображает рейтинг.PHP bar rating bar bar

Итак, перед тем, как это будет 5 точек, все белые, если не оценены, тогда цвет в рейтингах синий. Я бы отобразил эти точки через шрифтообразные глифы. Таким образом, вывести 5 из них.

Но теперь я пытаюсь изменить его там, где 5-точечная оценка будет отображать индикатор выполнения, а 5 пунктов будут использоваться в процентах для продолжительности хода.

Извините, если я неясен, я могу объяснить больше, если потребуется. В настоящее время он отображает все бары и рейтинговые значения, но только один раз. Так что это не работает так, как я этого хочу.

<?php if(count($languages) > 0) { ?> 

<div class="col-md-6"> 
    <ul class="no-bullets"> 

    <?php foreach($languages as $index => $language) { ?> 

     <li> 
      <span class="skillset-title"><?= $language->title; ?> (<?= $language->endorsement; ?>)</span> 
      <span class="skillset-rating"> 

      <?php 
      $levelpercentage = 0; 
      for($stars == 1; $stars <= 5; $stars++) { 

       if ($stars == 5): 

        echo $levelpercentage = 100; 

       elseif ($stars == 4): 

        echo $levelpercentage = 80; 

       elseif ($stars == 3): 

        echo $levelpercentage = 60; 

       elseif ($stars == 2): 

        echo $levelpercentage = 40; 

       elseif ($stars == 1): 

        echo $levelpercentage = 20; 

       endif; 

      ?> 

       <div class="progress-bar blue stripes"> 
        <span style="width: <?= ($language->level >= $stars) ? $levelpercentage : '0'; ?>%;"></span> 
       </div> 

      <?php } ?> 

      </span> 
     </li> 

     <?php if(ceil(count($languages)/2) == $index + 1) { ?> 

    </ul> 
</div> 
<div class="col-md-6"> 
    <ul class="no-bullets"> 

     <?php } ?> 

    <?php } ?> 

    </ul> 
</div> 

<?php } else { ?> 

<div class="alert alert-warning"> 
    No languages were found! 
</div> 

<?php } ?> 

ответ

0

В настоящее время отображаются все бары и рейтинговые значения

Это потому, что вы назначаете и эхо ваших баров и рейтинговые значения в for цикле.

переменной $stars присваивается каждое значение от 1 до 5, отображая панель на каждом шаге. Просто удалите свой for цикл, и он должен работать нормально (при условии использования уже определенно $stars переменных)

Bonus: Потому что я в хорошем настроении, я должен сказать вам, что есть более простой способ построить $levelpercentage переменные, чем используя if...else для каждого значения от 1 до 5, просто используйте:

$levelpercentage = $stars * 20; 
0

Спасибо! Это действительно помогло мне. Я пытался упростить то, что я пытался сделать. Это то, что я сделал, и похоже, что он работает.

<?php if(count($languages) > 0) { ?> 

<div class="col-md-6"> 
    <ul class="no-bullets"> 

    <?php foreach($languages as $index => $language) { $stars = 0; $stars <= 5; $stars++; ?> 

     <li> 
      <span class="skillset-title"><?= $language->title; ?> (<?= $language->endorsement; ?>)</span> 
      <span class="skillset-rating"> 
       <div class="progress-bar blue stripes"> 
        <span style="width: <?= ($language->level >= $stars) ? $language->level * 20 : 0; ?>%;"></span> 
       </div> 
      </span> 
     </li> 

     <?php if(ceil(count($languages)/2) == $index + 1) { ?> 

    </ul> 
</div> 
<div class="col-md-6"> 
    <ul class="no-bullets"> 

     <?php } ?> 

    <?php } ?> 

    </ul> 
</div> 

<?php } else { ?> 

<div class="alert alert-warning"> 
    No languages were found! 
</div> 

<?php } ?>