【问题标题】:Magento - How to filter a product collection using 2 category filters?Magento - 如何使用 2 个类别过滤器过滤产品集合?
【发布时间】:2009-11-12 21:02:14
【问题描述】:

有谁知道是否可以通过类别过滤器两次运行产品集合?我有一个隐藏的“特色”类别,我将产品添加到其中,以便可以将它们作为特色产品抓取。目前我的产品系列是这样的:

$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->addCategoryFilter('36');
    $_productCollection->load();

这在主页上可以正常工作,但是在类别页面上,我需要先按当前类别过滤结果,然后再按特色类别:

$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->addCategoryFilter('15')
    ->addCategoryFilter('36');
    $_productCollection->load(); 

不幸的是,如果不编辑核心文件,您似乎无法执行 2 个类别过滤器,我不想这样做。

任何想法如何解决这个问题?

我在想我可以分别获取 2 个产品集合,一个按当前类别过滤,一个按特色类别过滤,然后使用 PHP 的 stristr 找到位于两者中的产品并使用它们,例如

  if (stristr($featProductCollection, $currProductCollection))

有人有什么想法吗?我想我可能只需要返回产品的 SKU,可能是在逗号分隔的列表中。但我不确定解决这个问题的最佳方法,而且它看起来确实有点 hacky。

【问题讨论】:

  • 如果可以的话,它将极大地帮助解决 Magento 问题 1. 发布您用于应用过滤器的 PHP 代码示例 2. 对于代码中的任何变量,让人们知道对象的类 没有Magento 开发人员之间适当一致的共享词汇表,因此在帮助的情况下为人们提供尽可能多的上下文,然后找出答案。
  • 添加了一些示例代码。

标签: magento


【解决方案1】:

好的,实际上是在其他人的帮助下自己整理的:

    $_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->addCategoryFilter($_category)
    ->addAttributeToFilter('category_ids',array('finset'=>'36'))
    $_productCollection->load();

其中 $_category 是当前类别。

【讨论】:

  • 仅供参考,获取当前分类:$_category = Mage::getModel('catalog/category')->load(Mage::registry('current_category')->getId());
【解决方案2】:

不知道为什么,但这在 1.4 中不起作用,我的解决方案不是很漂亮,但在大型数据库上运行良好:

$select  = $collection->getSelect();
$select->where('(SELECT COUNT(1) FROM `catalog_category_product_index` AS `cat_index`
WHERE cat_index.product_id=e.entity_id AND cat_index.category_id
IN('.implode(',',$categories).') AND cat_index.store_id='.$collection->getStoreId().') >= '.count($categories));

【讨论】:

  • 最坏的做法,永远不要也永远不要在magento上使用sql做某事
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
相关资源
最近更新 更多