Magento - Không thể đặt thứ tự của bộ sưu tập


11

Điều này dường như không được đặt hàng chính xác, bất cứ điều gì tôi đang làm sai? Gợi ý?

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

Một bộ sưu tập khác dường như không được sắp xếp khác với bộ sưu tập đầu tiên:

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

Câu trả lời:


41

Bộ sưu tập EAV hoạt động với các thuộc tính, phương pháp sắp xếp cũng có một chút khác biệt ở đây

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

Đối với các bộ sưu tập không phải EAV, hãy sử dụng một trong các phương pháp sau

$kitCollection->getSelect()->order('related_sku DESC');
$kitCollection->setOrder('related_sku', 'DESC');

Bộ sưu tập thứ hai thì sao?
Easymoden00b

Đó là một bộ sưu tập kiểu phẳng, vì vậy không có EAV và thuộc tính. Hãy xem câu trả lời này về cách sắp xếp: stackoverflow.com/a/11354060
Sander Mangel

Tôi đã thử setOrder ('liên quan_sku', 'DESC'); nhưng nó không được sắp xếp.
Easymoden00b

Tôi đã chỉnh sửa câu trả lời của mình
Sander Mangel

2
@ Easymoden00b sử dụng cái này$kitCollection->getSelect()->order('related_sku DESC');
Priyank


3

Để mở rộng các câu trả lời khác ở đây, $kitCollection->getSelect()->order('column DESC')hoạt động tốt, nhưng bạn không thể thêm nhiều hơn một cột. Chẳng hạn, $kitCollection->getSelect()->order('column DESC, column2 ASC')sẽ có lỗi. Điều này là do công việc mà Magento làm để thoát khỏi tên cột. Để giải quyết vấn đề này, bạn có thể sử dụng Zend_Db_Exprnhư vậy:

$kitCollection->getSelect()->order(new Zend_Db_Expr('related_sku DESC, column2 ASC'));

1

Easymoden00b, setOrder()không hoạt động do cấu trúc Eav trên sản phẩm. @Sande nói sử dụng addAttributeToSort()chức năng, vì

  • Magento is join multiple tables for product collection.

  • Attribute alias name at collection

  • setOrder() functionđang hoạt động khi order expression Fieldname, SortOrdercorrect.

Bạn có thể thấy, làm thế nào magento tạo bí danh trường và nó liên quan đến thuộc tính bảng eav tại lớp Mage_Eav_Model_Entity_Collection_Ab khu vực

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

Đây là giải pháp của tôi để sắp xếp thứ tự các tùy chọn trong thuộc tính của sản phẩm có thể định cấu hình. Bắt đầu bằng cách sao chép Collection.php,

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

Sau đó, bạn có thể tìm thấy mã này:

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

Và thay thế nó bằng mã này:

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

Điều này sẽ cho phép bạn sắp xếp danh sách thả xuống của các tùy chọn thuộc tính theo bảng chữ cái. Bạn cũng có thể đảo ngược thứ tự bằng cách sử dụng array_reverse()hoặc các chức năng tương tự.

Trước đây, các tùy chọn thuộc tính của tôi là theo thứ tự bảng chữ cái ngược. Bây giờ, chúng theo thứ tự bảng chữ cái.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.