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

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

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

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;
}

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.