Checking if a Magento product is a child of a configurable product


Question

I have the following code to grab a list of Products

$collection = Mage::getModel('catalog/product')->getCollection();

$collection->addAttributeToSelect('name')
     ->addAttributeToFilter("category_ids", array('finset'=>$this->category_id));

foreach($collection as $product) {
   echo $product->getName();
}

My question is, how can I NOT echo products that are 'simple' but belong to a parent 'configurable' product. (for example don't show "Red Shirt Medium" as it belongs to "Red Shirt")

I have worked out that this association lives in 'catalog_product_super_link' but I have only just started with Magento and unfortuantely don't know how to do the filtering :)

Cheers guys,

Chris.

1
26
2/1/2016 12:40:34 PM

Accepted Answer

I don't know a direct way to add this condition to the collection, I'd be interested in such a solution too. But you can always check inside the loop for each product:

if (empty(Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId())))
{
    echo $product->getName();
}
31
7/16/2015 9:10:55 AM

I've done something similar for our google feed. This excerpt of code is what I use to check the products inheritance:

$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToSelect('*');
$products->addAttributeToFilter('status', 1);//enabled
$products->addAttributeToFilter('price', array('gt' => 0) );//price not 0
//$products->addAttributeToFilter('visibility', 4); //catalog, search - comment out to show all items (configurable products simple product breakdowns)

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);

$prodIds=$products->getAllIds();
try {
foreach($prodIds as $productId) {
    $product = Mage::getModel('catalog/product');
    $product->load($productId);

    // SIMPLE PRODUCTS
    if($product->getTypeId() == 'simple' ) {
        $prodName = trim($product->getName());

        $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($productId);
        if(!$parentIds)
            $parentIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($productId);

        if($parentIds) {    
            $parentProd = Mage::getModel('catalog/product')->load($parentIds[0]);           
            /* 
             * do something if this product has a parent or do some checks against $parentProd
             */
         } // end parent check  
    }//if SIMPLE
} // foreach

} catch(Exception $e) {
    die($e->getMessage());
}

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon