Pages

Sunday, June 30, 2013

How to get a grouped product’s associated products in Magento

This is a question that seems to be asked quite often by new Magento developers.

There is no simple Mage_Catalog_Model_Product::getAssociatedProducts() method, or similar to return all simple products assigned to a grouped product. I outline here how Magento gains access to the collection that we need.

In

/magento/app/design/frontend/base/default/template/catalog/product/view/type/grouped.phtml

you’ll see that they use this:

<?php
    $_associatedProducts = $this->getAssociatedProducts();

Since that .phtml file is of type Mage_Catalog_Block_Product_View_Type_Grouped, we can go to

/magento/app/code/core/Mage/Catalog/Block/Product/View/Type/Grouped.php

and see in Mage_Catalog_Block_Product_View_Type_Grouped::getAssociatedProducts() that they have done this:

<?php
    $this->getProduct()->getTypeInstance(true)->getAssociatedProducts($this->getProduct());

So we can safely assume that $this->getProduct() returns a product object, and replace it with your $product variable like so:

<?php
    $associatedProducts = $product->getTypeInstance(true)->getAssociatedProducts($product);

So a total solution would look something like this:

<?php
    $products = Mage::getModel('catalog/product')
        ->getCollection()
        ->addAttributeToFilter('type_id', array('eq' => 'grouped'));
    foreach ($products as $product) {
        $associatedProducts = $product->getTypeInstance(true)->getAssociatedProducts($product);
        // Do something with the $associatedProducts collection
    }

No comments:

Post a Comment