Magento – 检索具有特定属性值的产品

前言:

在我的块代码中,我尝试以编程方式检索具有特定值属性的产品列表。

或者,如果不可能,那么如何检索所有产品然后过滤它们以仅列出具有特定属性的产品?

如何使用标准布尔过滤器执行搜索ANDOR匹配我的产品的子集?

几乎所有Magento模型都有一个相应的Collection对象,可用于获取Model的多个实例。

要实例化Product集合,请执行以下操作

$collection = Mage::getModel('catalog/product')->getCollection();

产品是Magento EAV样式模型,因此需要添加要返回的任何其他属性。

$collection = Mage::getModel('catalog/product')->getCollection();

//fetch name and orig_price into data
$collection->addAttributeToSelect('name');  
$collection->addAttributeToSelect('orig_price');    

有多种语法可用于在集合上设置过滤器。我总是使用下面的详细信息,但可能需要检查Magento源以获取可以使用过滤方法的其他方法。

以下显示如何按一系列值(大于AND小于)进行过滤

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');  
$collection->addAttributeToSelect('orig_price');    

//filter for products whose orig_price is greater than (gt) 100
$collection->addFieldToFilter(array(
    array('attribute'=>'orig_price','gt'=>'100'),
)); 

//AND filter for products whose orig_price is less than (lt) 130
$collection->addFieldToFilter(array(
    array('attribute'=>'orig_price','lt'=>'130'),
));

这将按名称等于一件事或另一件事过滤。

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');  
$collection->addAttributeToSelect('orig_price');    

//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
    array('attribute'=>'name','eq'=>'Widget A'),
    array('attribute'=>'name','eq'=>'Widget B'),        
));

支持的短条件(eq,lt等)的完整列表可以在_getConditionSql方法中找到lib/Varien/Data/Collection/Db.php

最后,可以迭代所有Magento集合(基本集合类在迭代器接口上实现)。这是在设置过滤器后抓取产品的方式。

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');  
$collection->addAttributeToSelect('orig_price');    

//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
    array('attribute'=>'name','eq'=>'Widget A'),
    array('attribute'=>'name','eq'=>'Widget B'),        
));

foreach ($collection as $product) {
    //var_dump($product);
    var_dump($product->getData());
}

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论