Quasi tutti i modelli Magento hanno un oggetto Collection corrispondente che può essere utilizzato per recuperare più istanze di un modello.
di creare un'istanza di una raccolta del prodotto, effettuare le seguenti operazioni
$collection = Mage::getModel('catalog/product')->getCollection();
prodotti sono uno stile modello Magento EAV, quindi avrete bisogno di aggiungere eventuali attributi aggiuntivi che si desidera tornare.
$collection = Mage::getModel('catalog/product')->getCollection();
//fetch name and orig_price into data
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
Esistono più sintassi per l'impostazione dei filtri sulle raccolte. Io uso sempre quello verboso qui sotto, ma potresti voler ispezionare l'origine di Magento per ulteriori modi in cui i metodi di filtraggio possono essere usati.
Di seguito le proponiamo come filtrare da una serie di valori (maggiore e minore)
$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'),
));
Anche se questo sarà filtrare con un nome che è uguale a una cosa o un'altra.
$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'),
));
Un elenco completo delle condizionali brevi supportati (eq, lt, etc.) possono essere trovati nel metodo _getConditionSql
in lib/Varien/Data/Collection/Db.php
Infine, tutte le collezioni Magento possono essere iterate su (classe collezione di base implementa sulle interfacce iteratore). Ecco come afferrerai i tuoi prodotti una volta impostati i filtri.
risposta molto dettagliata. Grazie! –
Grazie mille per la risposta dettagliata. Mi hai impostato sulla strada giusta. Ho fatto un var_dump dei risultati del tuo codice di esempio. Poiché l'attributo con cui sto lavorando è un elemento di selezione multipla, sto ottenendo un ID numerico nei risultati, quindi un confronto di testo non funziona. PER ESEMPIO.$ this-> collection-> addFieldToFilter (array ( array ('attribute' => 'cw_category', 'eq' => 'Aero'), array ('attribute' => 'cw_category', 'eq' => 'Traccia'), array ('attribute' => 'cw_category', 'eq' => 'Touring') )); sta tornando 'cw_category' => string', 536.535.534' (lunghezza = 12) – Christian
non possono specificatamente ti aiuti lì senza un sacco di scavo (StackOverflow rappresentante è bello, ma non paga le bollette). Due strade per te da perseguire. Innanzitutto, come detto, controlla _getConditionSql per un elenco di tutti i possibili operatori di confronto. Potresti essere in grado di cavartela con una clausola simile o forse un in. In secondo luogo, se esegui il checkout del PHPDoc per il metodo addAttributeToFilter su Mage_Eav_Model_Entity_Collection_Abstract, vedrai che uno dei valori attesi del primo parametro è Mage_Eav_Model_Entity_Attribute_Interface. Questo potrebbe portarti sulla giusta strada. –