通过magento中的属性过滤产品

问题描述:

如何列出具有特定属性的产品?例如,如果Size是我的默认属性集中的一个属性。那么我如何列出所有Size = 22的产品呢?通过magento中的属性过滤产品

我在寻找答案的谷歌,将发布为答案,如果我找到任何。

感谢,

巴兰

例如:

$storeId = Mage::app()->getStore()->getId(); 
    $products = Mage::getResourceModel('catalog/product_collection');  

    $products->addAttributeToFilter(array(
        array('attribute' => 'attribute_code', 'eq' => 22))) 
        ->addAttributeToSelect('*') 
           ->setStoreId($storeId) 
           ->addStoreFilter($storeId) 
        ->setOrder('name', 'desc'); 

     Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products); 
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products); 
$this->setProductCollection($products); 

这对我来说工作正常。

+0

当我使用此代码时,我得到错误:“致命错误:调用成员函数getBackend()在/app/code/core/Mage/Eav/Model/Entity/Abstract.php中的非对象上816行“ – balanv 2012-02-15 11:20:48

我不认为目录产品是为此制作的。最好的办法是在静态表中移动属性Size(catalog_product_entity)。然后,您将能够按大小进行搜索,并保持目录的快速。如果你想在不同的属性上做这件事,我想你可以把它作为集合中的参数。但我不确定。

我只是做这个不是很久以前

拿到店里ID:在

$storeId = Mage::app()->getStore()->getId(); 

为了让所有的产品过滤掉一切,但尺寸

$_productCollection = Mage::getResourceModel('catalog/product_collection') 
    ->addAttributeToSelect('*') 
    ->addAttributeToFilter("Size", "1"); 

然后简单foreach循环添加以下内容(这将循环遍历数组$ _productCollection)

foreach($_productCollection as $_product) 
{ 
    $attr = Mage::getResourceModel('catalog/product')->getAttributeRawValue($_product->getId(), 'Size', $storeId); 
    if($attr == '22') 
    { 
     //Echo names of the products 
     echo $_product->getName(); 
    } 
} 

通过这种方式,您仍然可以在产品清单上做很多工作,而无需严格列出产品。因此,如果您愿意,您仍然可以添加名称,价格和更多属性。希望这有助于!