【问题标题】:Magento - How do I exclude a category from product collection?Magento - 如何从产品集合中排除一个类别?
【发布时间】:2012-10-26 08:42:01
【问题描述】:

我正在尝试创建一些功能,允许我根据类别和属性值等标准任意显示产品集合并使其按预期工作,但是我也希望能够排除某些类别这样我就可以包含“默认类别”,然后排除我不想要的任何子类别。似乎没有像 addCategoryFilter($catid) 这样的方法。

我找到了similar question that had been answered,但无法让它为我工作。

$catId = 9;

/* I'm almost positive 'e' is the alias used for catalog_product_entity, check your
query with echo (string) $products->getSelect(); if it doesn't work */
$products->getSelect()->join(array('cats' => 'catalog_category_product'), 'cats.product_id = e.entity_id');
$products->getSelect()->where('cats.category_id', array('neq' => $catId));

有没有人做过这种事情的经验?

【问题讨论】:

    标签: api magento product


    【解决方案1】:

    我认为没有一种本地方式可以做到这一点。但是您可以轻松地制作一个扩展的快速模块

    Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
    

    然后您可以创建自己的方法,并更改 joinCondition 以适应

    【讨论】:

    • 我一直在尝试像这样使用上面的代码: public function excludeCategory($productCollection,$catId) { if($catId){ $productCollection->getSelect()->join(array ('cats' => 'catalog_category_product'), 'cats.product_id = e.entity_id'); $productCollection->getSelect()->where('cats.category_id', array('neq' => $catId)); } 返回 $productCollection;在 /local/mage/catalog/block/product/whatsnew.php 中是“类 Mage_Catalog_Block_Product_Whatsnew 扩展 Mage_Catalog_Block_Product_Abstract”。
    • 正如我所说,当我尝试使用该功能时,我的产品块消失了,并且没有创建错误日志来为我提供关于为什么会发生这种情况的线索
    【解决方案2】:

    检查我的解决方案:

    $_productCollection = Mage::getModel('catalog/product')
            ->getCollection()
            ->addAttributeToSelect('*')
            ->addUrlRewrite();
    
    Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($_productCollection);
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($_productCollection);
    
    $_productCollection->load();
    $_productCollection->getSelect()->join(array('cats' => 'catalog_category_product'), 'cats.product_id = e.entity_id');
    $_productCollection->getSelect()->where('cats.category_id not in (41)');
    

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      相关资源
      最近更新 更多