Domanda

Sto cercando di ordinare una raccolta di prodotti tramite SKU in base all'ordine in cui gli SKU appaiono nell'array $ SKUS passarono nel metodo AddattributetOfilter nella collezione di seguito:

    $skus = explode(",",$this->getRequest()->getParam('skus'));

    $collection = Mage::getModel('catalog/product')->getCollection()
                    ->addAttributeToSelect('*')
                    ->addAttributeToFilter('sku',array('in'=>$skus))
                    ->addAttributeToFilter('visibility',array('gt'=>array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)))
                    ->addAttributeToFilter('status',array('eq'=> Mage_Catalog_Model_Product_Status::STATUS_ENABLED))
                    ->addUrlRewrite()
    ;
.

Come posso ordinare questa collezione in modo che i prodotti appaiano nello stesso ordine del loro SKU all'interno dell'array $ SKU?

È stato utile?

Soluzione

Ho fatto qualcosa di simile utilizzando la funzione FIELD() MySQL.Forse può anche aiutarti qui.

Dopo aver aggiunto gli altri filtri alla tua collezione, chiamalo:

$collection->getSelect()->order(new Zend_Db_Expr('FIELD(sku, "' . implode('","', $skus) . '") DESC'));
.

Altri suggerimenti

Quando si crea una raccolta utilizzando Mage::getModel('catalog/product')->getCollection() o Mage::getResourceModel('catalog/product_collection') La tabella di raccolta principale è catalog_product_entity.Questa tabella contiene una colonna sku che è anche indicizzata in modo che sia più efficiente sia per il filtro che per ordinare con questa colonna nella tabella principale.Questo ti darebbe qualcosa come:

$collection = Mage::getResourceModel('catalog/product_collection');
$collection
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility',array('gt'=>array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)))
    ->addAttributeToFilter('status',array('eq'=> Mage_Catalog_Model_Product_Status::STATUS_ENABLED))
    ->addUrlRewrite();

$collection->getSelect()
    ->where('sku IN (?)', $skus)
    ->order('sku DESC');
.

Non è necessario fare altro per ordinare la raccolta come stai già filtrando da SKU.

Ti consiglierei anche di non solo ->addAttributeToSelect('*'), aggiungi invece solo gli attributi di cui hai bisogno.A causa della struttura EAV delle tabelle dei prodotti, ciascun attributo aggiunta aggiungere la complessità alla query del database e renderà la chiamata meno efficiente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top