Presque tous les modèles Magento ont un objet Collection correspondant qui peut être utilisé pour récupérer plusieurs instances d'un modèle.
Pour instancier une collection de produits, procédez comme suit
$collection = Mage::getModel('catalog/product')->getCollection();
Les produits sont un modèle de style Magento EAV, vous devrez donc ajouter tous les attributs supplémentaires que vous souhaitez renvoyer.
$collection = Mage::getModel('catalog/product')->getCollection();
//fetch name and orig_price into data
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
Il existe plusieurs syntaxes pour définir des filtres sur les collections. J'utilise toujours la syntaxe verbeuse ci-dessous, mais vous pourriez vouloir inspecter la source Magento pour trouver d'autres façons d'utiliser les méthodes de filtrage.
L'exemple suivant montre comment filtrer par une plage de valeurs (supérieur à ET inférieur à)
$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'),
));
Alors que celui-ci filtrera par un nom qui équivaut à une chose OU une autre.
$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'),
));
Une liste complète des conditionnels courts supportés (eq, lt, etc.) peut être trouvée dans le manuel de l'utilisateur. _getConditionSql
méthode dans lib/Varien/Data/Collection/Db.php
Enfin, toutes les collections de Magento peuvent être itérées (la classe de collection de base implémente l'une des interfaces d'itération). C'est ainsi que vous récupérerez vos produits une fois les filtres définis.
$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());
}