cancel
Showing results for 
Search instead for 
Did you mean: 

Get the average rating of the current category

SOLVED
   Did you know you can see the translated content as per your choice?

Translation is in progress. Please check again after few minutes.

Get the average rating of the current category

Hi guys! 

I'm actually a noob on magento cms.

Can someone tell me how to get the average rating of the current category?

that's what I did :

 

	$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();
		if($_votes->
        $totalRating += $_votes->getFirstItem()->getValue();
	}
	Zend_debug::dump(100 * $totalRating / (5 * $reviews));

Did I miss something?

 

thanks in advance

 

1 ACCEPTED SOLUTION

Accepted Solutions

Re: Get the average rating of the current category

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;

 

View solution in original post

3 REPLIES 3

Re: Get the average rating of the current category

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;

 

Re: Get the average rating of the current category

Hi @anthony_ip,

 

Are you using that calc everytime the category is rendered?

In taht case, did you see some performance issue?

Re: Get the average rating of the current category

I indeed use this calc in each render.

I didn't check the perf