2

I'm trying to create the collection of latest 5 reviews from products with specific attribute (e.g. - brand). Here is my current code that displays just latest 5 reviews:

<?php 
$reviews = Mage::getModel('review/review')->getResourceCollection();
$reviews->addStoreFilter( Mage::app()->getStore()->getId() )
                ->addStatusFilter( Mage_Review_Model_Review::STATUS_APPROVED )
                ->setDateOrder()
                ->addRateVotes()
                ->setPageSize(5)
                        ->setCurPage(1)
                ->load();


?>
<!-- Print reviews -->
<ol>
<?php
foreach($reviews as $review) {
    $review_data = $review->getData();
    $product = Mage::getModel('catalog/product')->load( $review_data['entity_pk_value'] );
    ?>
    <li>
        <h4>Review of: <?php echo $product->getName() ?></h4>
        <p><?php echo $review_data['detail']; ?></p>
    </li>
    <?php
}
?>
</ol>

Is there any way to apply some filter to $reviews collection so it'll contain just reviews from specific attribute name?

Thanks for help.

UPD: code that works: https://gist.github.com/dimsemenov/5845535

4

Let's assume that your attribute has int type. In this case you can do something like this:

$collection = Mage::getModel('review/review')->getCollection()
    ->addStoreFilter(Mage::app()->getStore()->getId())
    ->addStatusFilter(Mage_Review_Model_Review::STATUS_APPROVED)
    ->setDateOrder()
    ->addRateVotes()
    ->setPageSize(5)
    ->setCurPage(1);

$collection->getSelect()
    ->join(array('attr' => 'catalog_product_entity_int'), 'attr.entity_id = main_table.entity_pk_value', array('*'))
    ->where('attr.attribute_id = 272');

Where 272 is the of your attribute id.

If you also want to limit a collection to reviews of products with specific attribute set to specific value you can add something like this to the end

->where('attr.value = 24')

Where 24 is the value of your attribute.

If your attribute has different type then just replace catalog_product_entity_int with EAV table of your attribute.

| improve this answer | |
  • Nevermind. Thanks for help, your solution works like a charm. – Dmitry Semenov Jun 23 '13 at 16:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.