Fast alle Magento-Modelle verfügen über ein entsprechendes Collection-Objekt, das zum Abrufen mehrerer Instanzen eines Modells verwendet werden kann.
Um eine Produktsammlung, gehen Sie wie folgt
$collection = Mage::getModel('catalog/product')->getCollection();
Produkte sind ein Magento EAV Stil Modell instanziiert, so dass Sie auf zusätzliche Attribute hinzufügen müssen werden, die Sie zurückgeben möchten.
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 für zusätzliche Möglichkeiten untersuchen, wie die Filtermethoden verwendet werden können.
Im Folgenden wird gezeigt, wie durch eine Reihe von Werten filtern (größer und kleiner als)
$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'),
));
Während dies durch einen Namen auswählen, wird die eine oder andere gleich.
$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'),
));
Eine vollständige Liste der unterstützten kurzen conditionals (eq, lt, etc.) können in dem Verfahren in _getConditionSql
lib/Varien/Data/Collection/Db.php
Schließlich werden alle Magento Sammlungen iteriert werden kann (der Basisklasse gefunden werden Sammel implementiert eine der Iterator-Schnittstellen). So greifen Sie Ihre Produkte an, sobald Filter eingestellt sind.
$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('name'=>'orig_price','eq'=>'Widget A'),
array('name'=>'orig_price','eq'=>'Widget B'),
));
foreach ($collection as $product) {
//var_dump($product);
var_dump($product->getData());
}
sehr detaillierte Antwort. Vielen Dank! –
Vielen Dank für die ausführliche Antwort. Du hast mich auf den richtigen Weg gesetzt. Ich habe einen var_dump der Ergebnisse von Ihrem Beispielcode gemacht. Da das Attribut, mit dem ich arbeite, ein Mehrfachauswahlelement ist, erhalte ich eine numerische ID in den Ergebnissen, sodass ein Textvergleich nicht funktioniert. Z.B.$ this-> Sammlung-> addFieldToFilter (Array ( Array ('Attribut' => 'cw_category', 'eq' => 'Aero'), Array ('Attribut' => 'cw_category', 'eq' => 'Track'), Array ('Attribut' => 'cw_category', 'eq' => 'Touring') )); kehrt ‚cw_category‘ => string‘, 536535534' (Länge = 12) – Christian
nicht speziell Sie Kann es helfen, ohne viel Graben (rep Stackoverflow ist schön, aber es lohnt sich nicht, die Rechnungen). Zwei Möglichkeiten, die Sie verfolgen können. Zuerst, wie bereits erwähnt, checkout _getConditionSql für eine Liste aller möglichen Vergleichsoperatoren. Sie können vielleicht mit einer Like-Klausel oder vielleicht einem In auskommen. Zweitens, wenn Sie das PHPDoc für die addAttributeToFilter-Methode in Mage_Eav_Model_Entity_Collection_Abstract auschecken, sehen Sie, dass einer der erwarteten Werte des ersten Parameters ein Mage_Eav_Model_Entity_Attribute_Interface ist. Das könnte Sie auf den richtigen Weg führen. –