Почти все модели Magento имеют соответствующий объект Collection, который можно использовать для выборки нескольких экземпляров модели.
Чтобы создать экземпляр коллекции 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'),
));
Полный список поддерживаемых коротких условий (например, 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());
}