/**
  * Add attribute to sort order
  *
  * @param string $attribute
  * @param string $dir
  * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
  */
 public function addAttributeToSort($attribute, $dir = 'asc')
 {
     if ($this->isEnabledFlat()) {
         if ($attribute == 'position') {
             $column = $attribute;
         } else {
             $column = $this->getEntity()->getAttributeSortColumn($attribute);
         }
         if ($column) {
             $this->getSelect()->order("{$column} {$dir}");
         }
         return $this;
     }
     if ($attribute !== 'position') {
         $attrInstance = $this->getEntity()->getAttribute($attribute);
         if ($attrInstance && $attrInstance->usesSource()) {
             $attrInstance->getSource()->addValueSortToCollection($this, $dir);
             return $this;
         }
     }
     return parent::addAttributeToSort($attribute, $dir);
 }
 /**
  * Add attribute to sort order
  *
  * @param string $attribute
  * @param string $dir
  * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
  */
 public function addAttributeToSort($attribute, $dir = 'asc')
 {
     if ($attribute == 'position') {
         if (isset($this->_joinFields[$attribute])) {
             $this->getSelect()->order("{$attribute} {$dir}");
             return $this;
         }
         $this->getSelect()->order("cat_index_position {$dir}");
         // optimize if using cat index
         $filters = $this->_productLimitationFilters;
         if (isset($filters['category_id']) || isset($filters['visibility'])) {
             $this->getSelect()->order('cat_index.product_id ' . $dir);
         } else {
             $this->getSelect()->order('e.entity_id ' . $dir);
         }
         return $this;
     }
     $storeId = Mage::app()->getStore()->getId();
     if ($attribute == 'price' && $storeId != 0) {
         $this->addPriceData();
         $this->getSelect()->order("price_index.min_price {$dir}");
         return $this;
     }
     if ($attribute == 'is_saleable') {
         $this->getSelect()->order("is_saleable " . $dir);
         return $this;
     }
     if ($this->isEnabledFlat()) {
         $column = $this->getEntity()->getAttributeSortColumn($attribute);
         if ($column) {
             $this->getSelect()->order("e.{$column} {$dir}");
         } else {
             if (isset($this->_joinFields[$attribute])) {
                 $this->getSelect()->order($this->_getAttributeFieldName($attribute) . ' ' . $dir);
             }
         }
         return $this;
     } else {
         $attrInstance = $this->getEntity()->getAttribute($attribute);
         if ($attrInstance && $attrInstance->usesSource()) {
             $attrInstance->getSource()->addValueSortToCollection($this, $dir);
             return $this;
         }
     }
     return parent::addAttributeToSort($attribute, $dir);
 }
示例#3
0
 /**
  * Add attribute to sort order
  *
  * @param string $attribute
  * @param string $dir
  * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
  */
 public function addAttributeToSort($attribute, $dir = 'asc')
 {
     if ($attribute == 'position') {
         if (isset($this->_joinFields[$attribute])) {
             $this->getSelect()->order("{$attribute} {$dir}");
             return $this;
         }
         $this->getSelect()->order("cat_index_position {$dir}");
         // optimize if using cat index
         $filters = $this->_productLimitationFilters;
         if (isset($filters['category_id']) || isset($filters['visibility'])) {
             $this->getSelect()->order('cat_index.product_id ' . $dir);
         } else {
             $this->getSelect()->order('e.entity_id ' . $dir);
         }
         return $this;
     }
     $storeId = Mage::app()->getStore()->getId();
     if ($attribute == 'price' && $storeId != 0) {
         $websiteId = Mage::app()->getStore()->getWebsiteId();
         $customerGroup = Mage::getSingleton('customer/session')->getCustomerGroupId();
         if ($this->isEnabledFlat()) {
             $priceColumn = 'e.display_price_group_' . $customerGroup;
             $this->getSelect()->order("{$priceColumn} {$dir}");
         } else {
             $priceAttributeId = $this->getAttribute('price')->getId();
             $entityCondition = '_price_order_table.entity_id = e.entity_id';
             $storeCondition = $this->getConnection()->quoteInto('_price_order_table.website_id = ?', $websiteId);
             $groupCondition = $this->getConnection()->quoteInto('_price_order_table.customer_group_id = ?', $customerGroup);
             $attributeCondition = $this->getConnection()->quoteInto('_price_order_table.attribute_id = ?', $priceAttributeId);
             $this->getSelect()->joinLeft(array('_price_order_table' => $this->getTable('catalogindex/price')), "{$entityCondition} AND {$storeCondition} AND {$groupCondition} AND {$attributeCondition}", array());
             $this->getSelect()->order('_price_order_table.value ' . $dir);
             /**
              * Distinct we are using for remove duplicates of products which have
              * several rows in price index (like grouped products)
              */
             $this->getSelect()->distinct(true);
         }
         return $this;
     }
     if ($this->isEnabledFlat()) {
         $column = $this->getEntity()->getAttributeSortColumn($attribute);
         if ($column) {
             $this->getSelect()->order("e.{$column} {$dir}");
         }
         return $this;
     } else {
         $attrInstance = $this->getEntity()->getAttribute($attribute);
         if ($attrInstance && $attrInstance->usesSource()) {
             $attrInstance->getSource()->addValueSortToCollection($this, $dir);
             return $this;
         }
     }
     return parent::addAttributeToSort($attribute, $dir);
 }