如何在Magento中通过多个标签过滤productCollection?

时间:2013-02-17 21:00:09

标签: php magento

我有一系列产品标签,我想找到所有分配了这些标签的产品(I.E.返回所有标签为“大”和“红色”的产品)。我目前正在使用以下内容,但它无法按预期工作。

$this->_productCollection = Mage::getResourceModel('tag/product_collection')
    ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
    ->addStoreFilter(Mage::app()->getStore()->getId())
    ->addMinimalPrice()
    ->addUrlRewrite()
    ->setActiveFilter();

foreach ($tags as $tagName) {
    $tagId = Mage::getModel('tag/tag')->loadByName($tagName)->getId();
    $this->_productCollection->addTagFilter($tagId);
}

似乎addTagFilter()只能运行一次,而不是多个标签。我也试过

$this->_productCollection->getSelect()->Where('relation.tag_id=?', $tagId);

但是,再次添加多个Where(relation.tag_id=?, $tagId)似乎不起作用。

3 个答案:

答案 0 :(得分:1)

当我尝试使用Multi Select Attribute创建的值来过滤产品集合时,我遇到了这个非常有趣的问题,因为它不像任何其他属性那样简单,即。,

$product_collection->addAttributeToFilter('attribute_code',"some value")

集合过滤器提供过滤条件'finset',这有助于我们过滤集合中的属性值。

首先,我们需要获取属性的各种值的ID,如下所示:

$attributeOptionArray=array();
$opts_attr = Mage::getModel('eav/config')->getAttribute('catalog_product', 'attribute_code');
foreach ( $opts_attr->getSource()->getAllOptions(true, true) as $option){
$attributeOptionArray[$option['value']] = $option['label'];
}

接下来,我们需要使用此数组属性值来筛选产品选项:

$product_collection=Mage::getModel("catalog/product")->getCollection();
$product_collection->addAttributeToFilter("attribute_code",array('finset'=>array_search("Some Option's label",$attributeOptionArray)));

说明:

  1. 首先,我们将产品集合加载到变量

  2. 我们添加“attributeToFilter”,以指定过滤条件。

  3. 使用array_search条件,我们会尝试查找与Option标签对应的ID。

  4. 将此ID传递给具有finset条件的过滤器。

  5. 希望这有帮助。

答案 1 :(得分:0)

您必须收集数组中的所有标记ID

$this->_productCollection->getSelect()->where('relation.tag_id IN (?)', implode(',',$tagId);

答案 2 :(得分:0)

$ prodids = array(); //产品ID数组 $ tagName = array(" Awesomeee"," Black"); //您的标记名称

                        foreach ($tagName as $_tagname) {
                            $tagId=Mage::getModel('tag/tag')->loadByName($_tagname)->getId();
                            $collections = Mage::getResourceModel('tag/product_collection')
                                ->addAttributeToSelect('sku')
                                ->addAttributeToSelect('name')
                                ->addTagFilter($tagId);
                            $productIDs = $collections->getData();

                            foreach($productIDs as $_product){
                                array_push($prodids,$_product['product_id']);
                            }
                        }


                        $collection = Mage::getModel('catalog/product')
                            ->getCollection()
                            ->addAttributeToSelect('*')
                            ->addAttributeToFilter('entity_id', array('in' => $prodids));

$ _ productCollection = $ collection; //最终产品系列