如何解决Magento-检索具有特定属性值的产品
几乎所有的Magento模型都有一个对应的Collection对象,该对象可用于获取模型的多个实例。
要实例化产品集合,请执行以下操作
$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'),
));
可以在中的_getConditionsql
方法中找到支持的简短条件(eq,lt等)的完整列表。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());
}
解决方法
在我的阻止代码中,我试图以编程方式检索具有特定值属性的产品列表。
或者,如果不可能的话,将如何检索所有产品然后过滤它们以仅列出具有特定属性的产品?
如何使用标准布尔过滤器执行搜索AND
或OR
匹配产品的子集?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。