마 젠토-수집 순서를 설정할 수 없습니다


11

이것은 올바르게 주문되지 않은 것 같습니다. 잘못하고 있습니까? 제안?

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

정렬되지 않은 다른 컬렉션은 첫 번째 컬렉션과 다릅니다.

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

답변:


42

EAV 컬렉션은 속성과 함께 작동하며 정렬 방법은 여기에서도 약간 다릅니다.

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

EAV가 아닌 컬렉션의 경우 다음 방법 중 하나를 사용하십시오.

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

두 번째 컬렉션은 어떻습니까?
easymoden00b 2016 년

플랫 타입 컬렉션이므로 EAV 및 속성이 없습니다. 정렬 방법에 대한이 답변을 살펴보십시오. stackoverflow.com/a/11354060
Sander Mangel

setOrder ( 'related_sku', 'DESC')를 시도했습니다. 정렬되지 않았습니다.
easymoden00b 2016 년

내 답변을 수정했습니다
Sander Mangel

2
@ easymoden00b 이것을 사용하십시오$kitCollection->getSelect()->order('related_sku DESC');
Priyank


3

다른 답변을 확장하려면 $kitCollection->getSelect()->order('column DESC')잘 작동하지만 둘 이상의 열을 추가 할 수는 없습니다. 예를 들어 $kitCollection->getSelect()->order('column DESC, column2 ASC')오류가 발생합니다. 이것은 Magento가 열 이름을 이스케이프 처리하는 작업 때문입니다. 이 문제를 해결하려면 다음 Zend_Db_Expr과 같이 사용할 수 있습니다 .

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

1

easymoden00b, setOrder()제품의 Eav 구조로 인해 작동하지 않습니다. @Sande addAttributeToSort()

  • Magento is join multiple tables for product collection.

  • Attribute alias name at collection

  • setOrder() functionorder expression Fieldname, SortOrder 가 있을 때 작동합니다 correct.

당신은 볼 수 있습니다, 마 젠토가 필드 별칭을 생성하고 클래스 Mage_Eav_Model_Entity_Collection_Abstract 에서 eav 테이블 속성과 관련되는 방법을 볼 수 있습니다.

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

다음은 구성 가능한 제품 속성에서 옵션 순서를 정렬하는 솔루션입니다. Collection.php를 복사하여 시작하십시오.

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

그런 다음이 코드를 찾을 수 있습니다 :

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

그리고이 코드로 교체하십시오 :

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

그러면 속성 옵션의 드롭 다운 목록을 알파벳순으로 정렬 할 수 있습니다. array_reverse()또는 유사한 기능 을 사용하여 순서를 반대로 바꿀 수도 있습니다 .

이전에는 속성 옵션이 알파벳 역순으로되어있었습니다. 이제 알파벳 순서로되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.