我使用组件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;
}
我该怎么办?
答案 0 :(得分:1)
总之,请使用以下所示的百分比: $ this-&gt; item-&gt; votingPercentage (0到100)并将其转换为0到5范围内的数字当你将数字显示为x中的x时,你可能想要保持1位小数的精确度。
由于您不知道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)
?>