/** Add filters after all filters have applied for configurable products * * @param Varien_Event_Observer $observer * @author ksenevich@aitoc.com */ public function onCatalogProductCollectionLoadBefore(Varien_Event_Observer $observer) { /* @var $versionHelper AdjustWare_Nav_Helper_Version */ $versionHelper = Mage::helper('adjnav/version'); /* @var $collection Varien_Data_Collection_Db */ $collection = $observer->getEvent()->getCollection(); $adapter = $collection->getConnection(); $helper = Mage::helper('adjnav'); $filterAttributes = AdjustWare_Nav_Model_Catalog_Layer_Filter_Attribute::getFilterAttributes(); $filterProducts = AdjustWare_Nav_Model_Catalog_Layer_Filter_Attribute::getFilterProducts(); $configurableProducts = array(); $childByAttribute = array(); $child2parent = array(); $productModel = Mage::getModel('catalog/product')->getResource(); $attributesCount = count($filterAttributes); if ($versionHelper->hasConfigurableFix()) { foreach ($filterAttributes as $attributeId => $attributeValues) { $configurableQuery = new Varien_Db_Select($adapter); $configurableQuery->from(array('e' => $productModel->getTable('catalog/product')), 'entity_id')->join(array('l' => $productModel->getTable($versionHelper->getProductRelationTable())), 'l.parent_id = e.entity_id', array('child_id' => $versionHelper->getProductIdChildColumn()))->join(array('a' => Mage::getResourceModel('adjnav/catalog_product_indexer_configurable')->getMainTable()), 'a.entity_id = l.' . $versionHelper->getProductIdChildColumn(), array())->where('e.type_id = ?', Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)->where('a.store_id = ?', Mage::app()->getStore()->getId())->where('a.attribute_id = ?', $attributeId)->where('a.value IN (?)', $attributeValues)->group(array('e.entity_id', 'l.' . $versionHelper->getProductIdChildColumn(), 'a.store_id')); $statement = $adapter->query($configurableQuery); while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { $child2parent[$row['child_id']][] = $row['entity_id']; $childByAttribute[$row['child_id']][$attributeId] = true; } } foreach ($childByAttribute as $childId => $attributeIds) { if (count($attributeIds) == $attributesCount) { $configurableProducts[] = $childId; foreach ($child2parent[$childId] as $parentId) { $configurableProducts[] = $parentId; } } } } $configurableProducts = array_unique($configurableProducts); /* Commenting this section as it was causing issue */ /* foreach ($filterProducts as $attributeId => $filterProducts) { $alias = 'attr_index_'.$attributeId; $filterProducts = array_merge($filterProducts, $configurableProducts); if (empty($filterProducts)) { $filterProducts = array(-1); } $collection->getSelect()->where($alias.'.entity_id IN (?)', $filterProducts); } */ AdjustWare_Nav_Model_Catalog_Layer_Filter_Attribute::cleanFilterAttributes(); }