Fast alle Magento-Modelle verfügen über ein entsprechendes Collection-Objekt, mit dem mehrere Instanzen eines Modells abgerufen werden können.
Gehen Sie wie folgt vor, um eine Produktsammlung zu instanziieren
$collection = Mage::getModel('catalog/product')->getCollection();
Bei den Produkten handelt es sich um ein Magento EAV-Modell. Sie müssen daher alle zusätzlichen Attribute hinzufügen, die Sie zurückgeben möchten.
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
Es gibt mehrere Syntaxen zum Festlegen von Filtern für Sammlungen. Ich verwende immer die ausführliche unten, aber vielleicht möchten Sie die Magento-Quelle auf zusätzliche Möglichkeiten untersuchen, wie die Filtermethoden verwendet werden können.
Im Folgenden wird gezeigt, wie nach einem Wertebereich gefiltert wird (größer als UND kleiner als).
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','gt'=>'100'),
));
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','lt'=>'130'),
));
Dabei wird nach einem Namen gefiltert, der der einen oder anderen Sache entspricht.
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
$collection->addFieldToFilter(array(
array('attribute'=>'name','eq'=>'Widget A'),
array('attribute'=>'name','eq'=>'Widget B'),
));
Eine vollständige Liste der unterstützten kurzen Bedingungen (Gl., Lt usw.) finden Sie in der _getConditionSql
Methode inlib/Varien/Data/Collection/Db.php
Schließlich können alle Magento-Sammlungen iteriert werden (die Basissammlungsklasse implementiert eine der Iterator-Schnittstellen). So greifen Sie auf Ihre Produkte zu, sobald die Filter eingestellt sind.
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
$collection->addFieldToFilter(array(
array('attribute'=>'name','eq'=>'Widget A'),
array('attribute'=>'name','eq'=>'Widget B'),
));
foreach ($collection as $product) {
var_dump($product->getData());
}