Php 如何在Magento中通过多个标记筛选productCollection?
我有一系列产品标签,我想找到所有分配了这些标签的产品(即返回所有标签为“大”和“红色”的产品)。我目前正在使用以下工具,但它没有按预期工作Php 如何在Magento中通过多个标记筛选productCollection?,php,magento,Php,Magento,我有一系列产品标签,我想找到所有分配了这些标签的产品(即返回所有标签为“大”和“红色”的产品)。我目前正在使用以下工具,但它没有按预期工作 $this->_productCollection = Mage::getResourceModel('tag/product_collection') ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes()) -
$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);
但是,在其中添加多个
(relation.tag\u id=?,$tagId)
似乎不起作用。您必须收集数组中的所有标记id
$this->_productCollection->getSelect()->where('relation.tag_id IN (?)', implode(',',$tagId);
$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));
$\u productCollection=$collection//最终产品集合我遇到了一个非常有趣的问题,当时我正试图使用创建的多选属性中的值筛选产品集合,因为它不像对任何其他属性(即
$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)));
说明:
希望这能有所帮助。这是可行的,但并不完全符合我的需要。例如,如果我想获得分配了“红色”和“大”标签的产品,我可能会得到一个只有“红色”标签但没有“大”标签的产品我只想要同时具有这两个标签的产品。是的,这是一个“或”请求,要使用“和”,您需要更复杂的东西,我将进行调查。您可以尝试获取带有第一个标签的所有产品,然后获取带有另一个标签的所有产品(带有您尝试的第一个请求)然后比较集合以获取两个集合中的产品解决方案是获取所有带tag1的产品、所有带tag2的产品,然后将这两个集合中的产品分离出来吗?您可以使用“array_intersect”函数获取两个结果中的产品。$array1=带tag1的getproduct,$array2=带tag2的getproduct,$array3=数组相交($array1,$array2);