Search code examples
phpmagentomagento-1.9

Get average rating of the current category in Magento 1.9 CE


I'm new to magento and i'm currently working on the CE1.9 for work. I'm having trouble to get the average rating of the current category. Can someone help me ?

$category_id = Mage::getModel('catalog/layer')->getCurrentCategory()->getId();
$category = Mage::getModel('catalog/category')->load($category_id);
$products = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addCategoryFilter($category)->load();

$reviews = array();

foreach ($products as $product) {
$productId = $product->getId();
array_push($reviews, Mage::getModel('review/review')
        ->getResourceCollection()
        ->addStoreFilter(Mage::app()->getStore()->getId())
        ->addEntityFilter('product', $productId)
        ->addStatusFilter(Mage_Review_Model_Review::STATUS_APPROVED)
        ->setDateOrder()
        ->addRateVotes()
);
}


foreach ($reviews as $review) {
    $_votes = $review->getRatingVotes()->getFirstItem();
    $totalRating += $_votes->getFirstItem()->getValue();
}
Zend_debug::dump(100 * $totalRating / (5 * $reviews));

Did I miss something?

Thanks in advance


Solution

  • Okay, I solved it myself.

    For those interested, here is the code:

        $categoryId = Mage::getModel('catalog/layer')->getCurrentCategory()->getId();
        $currentCategory = Mage::getModel('catalog/category')->load($categoryId);
        $productList = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addCategoryFilter($currentCategory)->load();
        $reviewList = array();
        $storeId = Mage::app()->getStore()->getId();
        foreach ($productList as $product) {
            $summaryData = Mage::getModel('review/review_summary')->setStoreId($storeId)->load($product->getEntityID());
            $reviewData[] = $summaryData['rating_summary'] / 20;
        }
        $nbReview = 0;
        foreach ($reviewData as $review) {
            if ($review != Null)
                $nbReviews++;
                $totalReviewIntoStar += $review;
        }
        return $AvgRating = $totalReviewIntoStar / $nbReviews;