我有一系列产品标签,我想找到所有分配了这些标签的产品(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)
似乎不起作用。
答案 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)));
说明:
首先,我们将产品集合加载到变量
我们添加“attributeToFilter”,以指定过滤条件。
使用array_search条件,我们会尝试查找与Option标签对应的ID。
将此ID传递给具有finset条件的过滤器。
希望这有帮助。
答案 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; //最终产品系列