0

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

$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)似乎不起作用。

4

3 回答 3

1

我遇到了这个非常有趣的问题,当我尝试使用创建的多选属性中的值过滤产品集合时,因为它不像适用于任何其他属性那样容易,即

$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 条件的过滤器。

希望这可以帮助。

于 2016-11-26T10:06:15.407 回答
0

您必须在一个数组中收集所有标签 ID

$this->_productCollection->getSelect()->where('relation.tag_id IN (?)', implode(',',$tagId);
于 2013-02-17T22:00:06.160 回答
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;//最终产品集合

于 2016-11-26T08:12:18.300 回答