Magento将2个类别合并为1个集合

时间:2012-06-05 14:32:23

标签: magento

我有一个销售汽车零件的网站。我已将我的类别设置为Make - >型号 - >年,从这里过滤由属性完成。制动器,车轮,发动机等......

这会像我期望的那样过滤收藏品,但是一旦我到了这一年,我想要包括通用类别中的项目。 I.E.该系列应包括特定车型的物品,以及所有车辆的“通用”物品。

我发现这Magento: how to merge two product collections into one?似乎是我想要的,但我似乎无法确切地知道应该在哪里实施。

List.php,Layer.php和Category.php中有getCollection()方法,我试图在上面的链接中实现代码,但没有成功。如果我将它包含在List.php中,则集合似乎已合并,但属性过滤不适用于Universal产品。

我尝试在Category.php中编辑getProductCollection函数,如下所示:

public function getProductCollection()
{
    $collection = Mage::getResourceModel('catalog/product_collection')
        ->setStoreId($this->getStoreId())
        ->addCategoryFilter($this);
    //return $collection;

    $universalCollection = Mage::getModel('catalog/category')->load(18)->getProductCollection();

    $merged_ids = array_merge($collection->getAllIds(), $universalCollection->getAllIds());
    // can sometimes use "getLoadedIds()" as well

    $merged_collection = Mage::getResourceModel('catalog/product_collection')
        ->addFieldToFilter('entity_id', $merged_ids)
        ->addAttributeToSelect('*');

    return $merged_collection;
} 

但是这给了我:“致命错误:达到了'200'的最大功能嵌套级别,正在中止!”

如果有人能提出任何建议,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

您遇到致命错误,因为您导致无限循环发生。

这只是因为您的代码位于Category模型getProductCollection()方法内,并且您再次在新的类别模型上调用getProductCollection()。这导致无限循环

所以,你需要将那些代码移出那里。 你真的不应该按照目前的方式编辑这些核心文件。

完全取决于你如何扩展模型:重写,观察者等。但是不要改变Magento核心代码。

我在下面提供了一个工作示例,它将两个类别的产品集合合并到类别模型的外部:

    $storeId = Mage::app()->getStore()->getId();
    $categoryOneId = 10;
    $categoryTwoId = 13;

    $categoryOne = Mage::getModel('catalog/category')->load($categoryOneId);
    $categoryTwo = Mage::getModel('catalog/category')->load($categoryTwoId);

    $collectionOne = Mage::getModel('catalog/product')->getCollection()
        ->setStoreId($storeId)
        ->addCategoryFilter($categoryOne);

    $collectionTwo = Mage::getModel('catalog/product')->getCollection()
        ->setStoreId($storeId)
        ->addCategoryFilter($categoryTwo);

    $merged_ids = array_merge($collectionOne->getAllIds(), $collectionTwo->getAllIds());

    $mergedCollection = Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('entity_id', $merged_ids);