コード例 #1
0
ファイル: Collection.php プロジェクト: nemphys/magento2
 /**
  * Add attribute to sort order
  *
  * @param string $attribute
  * @param string $dir
  * @return Mage_Catalog_Model_Resource_Product_Collection
  */
 public function addAttributeToSort($attribute, $dir = self::SORT_ORDER_ASC)
 {
     if ($attribute == 'position') {
         if (isset($this->_joinFields[$attribute])) {
             $this->getSelect()->order($this->_getAttributeFieldName($attribute) . ' ' . $dir);
             return $this;
         }
         if ($this->isEnabledFlat()) {
             $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.position ' . $dir);
         } else {
             $this->getSelect()->order('e.entity_id ' . $dir);
         }
         return $this;
     } elseif ($attribute == 'is_saleable') {
         $this->getSelect()->order("is_saleable " . $dir);
         return $this;
     }
     $storeId = $this->getStoreId();
     if ($attribute == 'price' && $storeId != 0) {
         $this->addPriceData();
         $this->getSelect()->order("price_index.min_price {$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);
 }
コード例 #2
0
ファイル: Collection.php プロジェクト: shebin512/Magento_Zoff
 /**
  * Add attribute to sort order
  *
  * @param string $attribute
  * @param string $dir
  * @return Mage_Catalog_Model_Resource_Product_Collection
  */
 public function addAttributeToSort($attribute, $dir = self::SORT_ORDER_ASC)
 {
     if ($attribute == 'position') {
         if (isset($this->_joinFields[$attribute])) {
             $this->getSelect()->order($this->_getAttributeFieldName($attribute) . ' ' . $dir);
             return $this;
         }
         if ($this->isEnabledFlat()) {
             $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.position ' . $dir);
         } else {
             $this->getSelect()->order('e.entity_id ' . $dir);
         }
         return $this;
     } elseif ($attribute == 'is_saleable') {
         $this->getSelect()->order("is_saleable " . $dir);
         return $this;
     }
     $storeId = $this->getStoreId();
     if ($attribute == 'price' && $storeId != 0) {
         $this->getSelect()->joinLeft(array('_inventory_table' => $this->getTable('cataloginventory/stock_item')), "_inventory_table.product_id = e.entity_id", array('is_in_stock', 'manage_stock'));
         $this->addExpressionAttributeToSelect('on_top', '(CASE WHEN (((_inventory_table.use_config_manage_stock = 1) AND (_inventory_table.is_in_stock = 1)) OR  ((_inventory_table.use_config_manage_stock = 0) AND (1 - _inventory_table.manage_stock + _inventory_table.is_in_stock >= 1))) THEN 1 ELSE 0 END)', array());
         $this->getSelect()->order('on_top DESC');
         $this->addPriceData();
         $this->getSelect()->order("price_index.min_price {$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);
 }