Php 根据评级在前端显示星号

Php 根据评级在前端显示星号,php,jquery,html,css,Php,Jquery,Html,Css,我已经在后端创建了一个字段 当使用单选按钮时,我选择产品评级为1星、2星、3星、4星和5星 在前端显示时相同 <p class="tool-tip"><a href="#" onMouseover="ddrivetip('Expert Rating')"; onMouseout="hideddrivetip()">Expert Rating</a> - <?php echo $this->prodDet->v_child_safety?>

我已经在后端创建了一个字段 当使用单选按钮时,我选择产品评级为1星、2星、3星、4星和5星

在前端显示时相同

<p class="tool-tip"><a href="#" onMouseover="ddrivetip('Expert Rating')"; onMouseout="hideddrivetip()">Expert Rating</a> - <?php echo $this->prodDet->v_child_safety?></p>

-

它以数字形式显示评级为-1星、2星、3星、4星和5星

任何一个指南都可以提供最好的方法,让前端显示星形评级,而不是数字值,而不会使页面加载变慢吗

这不是重复的 我只想让用户在前端查看星型评级 他们不能修改评级或添加评级,只是管理员将评级分配为1星到5星,并且其在前端可见 现在,我希望星星显示在屏幕上,而不是以2星或3星的形式显示数值


谢谢

此解决方案使用隐藏单选按钮。由于fontAwesome,该品牌被视为明星。可以将星号的值发送到PHP脚本,也可以根据您拥有的任何值设置正确的星号

input[type=“radio”]{
显示:无;
}
标签{
显示:内联块;
}
输入[type=“radio”]:选中+标签{
游标:默认值;
颜色:红色;
}

首先,确保
$this->prodDet->v_child_safety
只返回一个数字。因此,它应该只返回1、2、3等,而不是1星、2星。然后用以下代码替换您的代码:

<?php

$stars = (int)$this->prodDet->v_child_safety;
$count = 1;
$result = "";

for($i = 1; $i <= 5; $i++){
    if($stars >= $count){
        $result .= "<span>&#x2605</span>";
    } else {
        $result .= "<span>&#x2606</span>";
    }
    $count++;
}
?>
<p class="tool-tip"><a href="#" onMouseover="ddrivetip('Expert Rating')"; onMouseout="hideddrivetip()">Expert Rating</a> - <?php echo $result?></p>

-

如果要使用星星图像,请使用以下代码:

<?php

$stars = (int)$this->prodDet->v_child_safety;
$result = "";

for($i = 1; $i <= $stars; $i++){
    $result .= "<img src='link_to_image_here.png'/>";
}
?>
<p class="tool-tip"><a href="#" onMouseover="ddrivetip('Expert Rating')"; onMouseout="hideddrivetip()">Expert Rating</a> - <?php echo $result?></p>

-


在每个输入中使用以下条件:

checked=“checked”

并使用
disabled
禁用所有输入,这样,如果您只想显示评级,就没有人可以更改值

div.stars{
宽度:270px;
显示:内联块;
}
input.star{display:none;}
星号{
浮动:对;
填充:10px;
字体大小:36px;
颜色:#444;
过渡:all.2s;
}
输入。星号:选中~标签。星号:之前{
内容:'\2605';
颜色:#FD4;
过渡:全部为0.25秒;
}
输入。star-5:选中~标签。star:之前{
颜色:#FE7;
文本阴影:0 0 20px#952;
}
input.star-1:选中~label.star:在{color:#F62;}之前
标签.星形:悬停{变换:旋转(-15度)比例(1.3);}
明星:之前{
内容:'\2605';
}


这个问题是关于显示一个值,而不是创建一个输入

有一种非常简单的方法可以支持半星,四舍五入到最接近的一半,使用字体awome(代码中的v4类,注释中的v5类)和一些基本算法

echo $rating;
echo "<span class='stars'>"
for ( $i = 1; $i <= 5; $i++ ) {
    if ( round( $rating - .25 ) >= $i ) {
        echo "<i class='fa fa-star'></i>"; //fas fa-star for v5
    } elseif ( round( $rating + .25 ) >= $i ) {
        echo "<i class='fa fa-star-half-o'></i>"; //fas fa-star-half-alt for v5
    } else {
        echo "<i class='fa fa-star-o'></i>"; //far fa-star for v5
    }
}
echo '</span>';
瞧,你得到了一个评级显示


使用此代码,它非常简单和有用。 代码正在成功运行

<?php 
    $select=4;
    $a=5-$select;
    $j=1;

    for ($i=1; $i<=$select; $i++) 
    { 
        echo "★"; 
        if($i==$select){
            for ($j=1; $j<=$a; $j++){
                echo "☆";
            }
        }
    }
?>


我可以假定
$this->prodDet->v_child_safety
可能会重复吗?尼米什我倾向于不同意重复。这不是一个独立的明星评级系统。这只是关于如何显示星图而不是文本。没有办法知道访客是否能够给自己打分。@Ruchika请回答我上面的问题。
$this->prodDet->v_child_safety
是否被
1星
等替换?您误解了这个问题。他不想得到评级。评级仅限后端。他只是希望根据后端设置的评级在前端显示明星。编辑:那次否决票不是我投的。你的答案很容易变成一个好答案。我的错。我调整了代码,以指示可以在哪里使用PHP来设置正确的星号。不确定是否要调整额定值。如果没有,它可以是只读的。是的-我也没有投反对票,为什么我会投反对票?对于那些想要帮助的人,我只希望在前端显示一个基于值的星星谢谢-但它总是在前端显示5个星星,尽管后端有1、2或3个评级。可能是什么原因issue@Ruchika第一个代码应该显示5颗星<代码>★和
是unicode字符。第一颗是黑星,第二颗是黑边白星。例如,如果评级为3,它会显示3颗黑星和2颗白星。如果评级为4,它将显示4颗黑星和1颗白星。
<?php 
    $select=4;
    $a=5-$select;
    $j=1;

    for ($i=1; $i<=$select; $i++) 
    { 
        echo "★"; 
        if($i==$select){
            for ($j=1; $j<=$a; $j++){
                echo "☆";
            }
        }
    }
?>