Frage

Ich versuche, eine Produktsammlung nach SKU zu sortieren, basierend auf der Reihenfolge, in der die SKUs im Array $ skus angezeigt werden, das an die Methode addAttributeToFilter in der folgenden Sammlung übergeben wurde:

    $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()
    ;

Wie kann ich diese Sammlung so sortieren, dass die Produkte in derselben Reihenfolge wie ihre Skus im Array $ skus angezeigt werden?

War es hilfreich?

Lösung

Ich habe mit der MySQL FIELD()-Funktion etwas Ähnliches gemacht.Vielleicht kann es dir vielleicht auch helfen.

Nachdem Sie die anderen Filter in Ihre Sammlung hinzugefügt haben, rufen Sie dies an:

generasacodicetagpre.

Andere Tipps

Beim Erstellen einer Sammlung mit Mage::getModel('catalog/product')->getCollection() oder Mage::getResourceModel('catalog/product_collection') die Hauptsammlungstabelle ist catalog_product_entity.Diese Tabelle enthält eine sku spalte, die ebenfalls indiziert ist, damit es am effizientesten ist, nach dieser Spalte in der Haupttabelle zu filtern und zu sortieren.Das würde dir so etwas geben wie:

$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');

Sie müssen nichts weiter tun, um die Kollektion zu bestellen, da Sie bereits nach SKU filtern.

Ich würde dir auch empfehlen, nicht nur ->addAttributeToSelect('*'), fügen Sie stattdessen nur die Attribute hinzu, die Sie benötigen.Aufgrund der EAV-Struktur der Produkttabellen erhöht jedes hinzugefügte Attribut die Komplexität der Datenbankabfrage und macht den Aufruf weniger effizient.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top