2

我使用组件 K2,它是投票/评级系统。目前它以百分比的形式显示评分,并带有一些 CSS 来查看星星。但是我不想显示星星,而是说例如 4.5/5

这是查看它的代码:

<?php if($this->item->params->get('catItemRating')): ?>
<div id="catItemRatingBlock">
 <div class="itemRatingForm">
   <ul class="itemRatingList">
     <li class="itemCurrentRating" id="itemCurrentRating<?php echo $this->item->id; ?>" style="width:<?php echo $this->item->votingPercentage; ?>%;"></li>
     <li><a href="#" rel="<?php echo $this->item->id;  ?>" class="one-star">1</a></li>
     <li><a href="#" rel="<?php echo $this->item->id;  ?>" class="two-stars">2</a></li>
     <li><a href="#" rel="<?php echo $this->item->id;  ?>" class="three-stars">3</a></li>
     <li><a href="#" rel="<?php echo $this->item->id;  ?>" class="four-stars">4</a></li>
     <li><a href="#" rel="<?php echo $this->item->id;  ?>" class="five-stars">5</a></li>
   </ul>
 </div>
</div>
<?php endif; ?>

这是在“com_k2/models/item.php”中找到的代码:

function getVotesPercentage($itemID = NULL)
{

    $mainframe = &JFactory::getApplication();
    $user = JFactory::getUser();
    $db = &JFactory::getDBO();
    $xhr = false;
    $result = 0;
    if (is_null($itemID))
    {

        $itemID = JRequest::getInt('itemID');
        $xhr = true;
    }

    $vote = K2ModelItem::getRating($itemID);

    if (!is_null($vote) && $vote->rating_count != 0)
    {
        $result = number_format(intval($vote->rating_sum) / intval($vote->rating_count), 2) * 20;
    }
    if ($xhr)
    {
        echo $result;
        $mainframe->close();
    }
    else
        return $result;
}

我该怎么办?

4

1 回答 1

1

总之,取如下所示的百分比: $this->item->votingPercentage (0 到 100),然后除以 20 将其转换为 0 到 5 范围内的数字。您可能希望保留 1 位小数将数字显示为 5 中的 x 时的准确位置。

由于您不知道votingPercentage 是字符串还是数字,我会在进行任何计算之前对其进行测试以确保它具有有效的数值:

<?php

if (!isnumeric($this->item->votingPercentage) {

   $numericRating = 0;

// If the value cannot be interpreted as a numeric, we assume a value of 0.

}

else {

   $numericRating = round(($this->item->votingPercentage / 2), 0);  

// The statement above is equivalent to dividing the percentage by 20 (to get a number from 0 to 5); and then multiplying by 10 to get a number from 0 to 50.  Since this final number could have a decimal component (for example 42.55 out of 50), we round to 0 decimal places to get rid of the decimal remainder - in this example, resulting in the number 43

   $numericRating = round(($numericRating / 10), 1);

// The statement above divides the number from the previous step by 10 (to shift the decimal point), and just for good measure, applies the rounding function one more time in case the division yields a number like 4.300000001 or 4.29999999

}

echo $numericRating . "/5";

// Finally, the resulting numeric value is rendered as a number from 0 to 5 with 1 decimal place, followed by the characters "/5"  (i.e. out of 5)
?>
于 2012-08-23T03:48:07.117 回答