Magento - Abholreihenfolge kann nicht festgelegt werden

11

Das scheint nicht richtig bestellt zu sein, was mache ich falsch? Vorschläge?

$componentQuantityCollection = Mage::getModel('catalog/product')->getCollection();
$componentQuantityCollection->joinField('qty',
    'cataloginventory/stock_item',
    'qty',
    'product_id=entity_id',
    '{{table}}.stock_id=1',
    'left');
$componentQuantityCollection->addAttributeToFilter('sku', array('in' => $componentSkus))->setOrder('sku','ASC');

Eine andere Sammlung, die nicht sortiert zu sein scheint und sich von der ersten unterscheidet:

$kitCollection = Mage::getModel('kitinventory/kitinventory')->getCollection()->addFieldToFilter('kit_sku', $sku)->setOrder('related_sku', 'DESC');
easymoden00b
quelle

Antworten:

41

EAV-Sammlungen arbeiten mit Attributen, auch hier ist die Sortiermethode etwas anders

$componentQuantityCollection->addAttributeToSort('sku', 'ASC');

Verwenden Sie für Nicht-EAV-Sammlungen eine der folgenden Methoden

$kitCollection->getSelect()->order('related_sku DESC');
$kitCollection->setOrder('related_sku', 'DESC');
Sander Mangel
quelle
Was ist mit der zweiten Kollektion?
easymoden00b
Das ist eine flache Typensammlung, also keine EAV und Attribute. Schauen Sie sich diese Antwort an, um zu erfahren,
Sander Mangel
Ich habe setOrder ('related_sku', 'DESC') ausprobiert. aber es ist nicht sortiert.
easymoden00b
Ich habe meine Antwort bearbeitet
Sander Mangel
2
@ easymoden00b benutze dies$kitCollection->getSelect()->order('related_sku DESC');
Priyank
3

Das Erweitern der anderen Antworten hier $kitCollection->getSelect()->order('column DESC')funktioniert einwandfrei, Sie können jedoch nicht mehr als eine Spalte hinzufügen. Zum Beispiel $kitCollection->getSelect()->order('column DESC, column2 ASC')wird Fehler. Dies liegt an der Arbeit, die Magento leistet, um den Spaltennamen zu entkommen. Um dies zu umgehen, können Sie Folgendes verwenden Zend_Db_Expr:

$kitCollection->getSelect()->order(new Zend_Db_Expr('related_sku DESC, column2 ASC'));
Tyler V.
quelle
1

easymoden00b, setOrder()funktioniert aufgrund der Eav-Struktur des Produkts nicht. Wie @Sande sagt, um die addAttributeToSort()Funktion zu verwenden , wegen

  • Magento is join multiple tables for product collection.

  • Attribute alias name at collection

  • setOrder() functionfunktioniert, wenn es order expression Feldname, SortOrder ist correct.

Sie können sehen, wie Magento Feldalias erstellt und jedes Tabellenattribut in der Klasse Mage_Eav_Model_Entity_Collection_Abstract verknüpft

public function addAttributeToSort($attribute, $dir = self::SORT_ORDER_ASC)
{
    if (isset($this->_joinFields[$attribute])) {
        $this->getSelect()->order($this->_getAttributeFieldName($attribute).' '.$dir);
        return $this;
    }
    if (isset($this->_staticFields[$attribute])) {
        $this->getSelect()->order("e.{$attribute} {$dir}");
        return $this;
    }
    if (isset($this->_joinAttributes[$attribute])) {
        $attrInstance = $this->_joinAttributes[$attribute]['attribute'];
        $entityField = $this->_getAttributeTableAlias($attribute) . '.' . $attrInstance->getAttributeCode();
    } else {
        $attrInstance = $this->getEntity()->getAttribute($attribute);
        $entityField = 'e.' . $attribute;
    }

    if ($attrInstance) {
        if ($attrInstance->getBackend()->isStatic()) {
            $orderExpr = $entityField;
        } else {
            $this->_addAttributeJoin($attribute, 'left');
            if (isset($this->_joinAttributes[$attribute])||isset($this->_joinFields[$attribute])) {
                $orderExpr = $attribute;
            } else {
                $orderExpr = $this->_getAttributeTableAlias($attribute).'.value';
            }
        }

        if (in_array($attrInstance->getFrontendClass(), $this->_castToIntMap)) {
            $orderExpr = Mage::getResourceHelper('eav')->getCastToIntExpression(
                $this->_prepareOrderExpression($orderExpr)
            );
        }

        $orderExpr .= ' ' . $dir;
        $this->getSelect()->order($orderExpr);
    }
    return $this;
}
Amit Bera
quelle
1

Hier ist meine Lösung zum Sortieren der Reihenfolge der Optionen im Attribut eines konfigurierbaren Produkts. Kopieren Sie zunächst Collection.php,

app/code/core/Mage/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php zu app/code/local/Mage/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php .

Dann finden Sie diesen Code:

foreach ($this->getProduct()->getTypeInstance(true)->getUsedProducts(array($productAttribute->getAttributeCode()), $this->getProduct()) as $associatedProduct) {

Und ersetzen Sie es durch diesen Code:

$assProds = $this->getProduct()->getTypeInstance(true)->getUsedProducts(array($productAttribute->getAttributeCode()), $this->getProduct());
sort($assProds);
foreach ($assProds as $associatedProduct) {

Auf diese Weise können Sie die Dropdown-Liste der Attributoptionen alphabetisch sortieren. Sie können die Reihenfolge auch mit umkehrenarray_reverse() oder ähnlichen Funktionen .

Zuvor waren meine Attributoptionen in umgekehrter alphabetischer Reihenfolge. Jetzt sind sie in alphabetischer Reihenfolge.

NotJay
quelle