Php 如何根据特定星星显示和筛选magento review

Php 如何根据特定星星显示和筛选magento review,php,magento,Php,Magento,我在magento有一家商店。 我们在magento产品页面中应用了明星评论。在我们的产品页面中,我们只有一个价值,那就是质量。每个客户在5颗星内审查产品。我们希望以百分比显示每个星号值。 例如:- 如果我有三个评论,三个评论中,两个评论有一颗星,我们希望显示一颗星作为一颗星-50%,如果三个评论有两颗星,那么我们将显示两颗星-30%,就像这样 我不知道如何在magento评论中实现这一点。我得到了一份很好的总结。如何找到每颗星的评级值 然后,我想根据星号评论对它们进行筛选,如果我点击1,则只显

我在magento有一家商店。 我们在magento产品页面中应用了明星评论。在我们的产品页面中,我们只有一个价值,那就是质量。每个客户在5颗星内审查产品。我们希望以百分比显示每个星号值。

例如:- 如果我有三个评论,三个评论中,两个评论有一颗星,我们希望显示一颗星作为一颗星-50%,如果三个评论有两颗星,那么我们将显示两颗星-30%,就像这样

我不知道如何在magento评论中实现这一点。我得到了一份很好的总结。如何找到每颗星的评级值


然后,我想根据星号评论对它们进行筛选,如果我点击1,则只显示一个星号评论;如果我点击2星,则显示2个星号评论。

重写区块
Mage\u Review\u区块\产品\视图\列表
,然后添加以下方法来计算平均值

public function getAvgReviewRatings(){
    return $this->calculateReviewRatings('avg');
}

public function getStarReviewRatings(){
    return $this->calculateReviewRatings('star');
}

private function calculateReviewRatings($params){
    $star = array('one'=>0,'two'=>0,'three'=>0,'four'=>0,'five'=>0);
    $avg = 0;

    $reviews = Mage::getModel('review/review') 
    ->getResourceCollection()
    ->addStoreFilter(Mage::app()->getStore()->getId())
    ->addEntityFilter('product', $this->getProductId())
    ->addStatusFilter(Mage_Review_Model_Review::STATUS_APPROVED)
    ->addRateVotes()
    ->setDateOrder();

    $ratings = array();
    if (count($reviews) > 0) {
        foreach ($reviews->getItems() as $review) {
            foreach( $review->getRatingVotes() as $vote ) {
                switch($vote->getValue()){
                    case 1:
                        $star['one']+=1;
                        break;
                    case 2:
                        $star['two']+=1;
                        break;
                    case 3:
                        $star['three']+=1;
                        break;
                    case 4:
                        $star['four']+=1;
                        break;
                    case 5:
                        $star['five']+=5;
                        break;
                    default:
                        break;
                }
                $ratings[] = $vote->getPercent();
            }
        }

        if($params == 'avg'){
        return (array_sum($ratings)/count($ratings))/20;
        }else if($params == 'star'){ 
         return $star;
        }
    }

}
通过调用
review/product/view/list.phtml
like中的方法,您可以调用并获取所有的星号值

    $stars = $this->getStarReviewRatings();
    foreach($stars as $star=>$value){
      echo $star."-".$value; 
    }