/** * 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); }
/** * Load collection * * @param bool $printQuery * @param bool $logQuery * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection */ public function load($printQuery = false, $logQuery = false) { if ($this->isLoaded()) { return $this; } if ($this->_loadWithProductCount) { $this->addAttributeToSelect('all_children'); $this->addAttributeToSelect('is_anchor'); } parent::load($printQuery, $logQuery); if ($this->_loadWithProductCount) { $this->_loadProductCount(); } return $this; }
/** * Clear collection * * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection */ public function clear() { foreach ($this->_items as $i => $item) { if ($item->hasStockItem()) { $item->unsStockItem(); } $item = $this->_items[$i] = null; } foreach ($this->_itemsById as $i => $item) { $item = $this->_itemsById[$i] = null; } unset($this->_items, $this->_data, $this->_itemsById); $this->_data = array(); $this->_itemsById = array(); return parent::clear(); }
/** * 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) { $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); }
public function setOrder($attribute, $dir = 'desc') { $storeId = Mage::app()->getStore()->getId(); $websiteId = Mage::app()->getStore()->getWebsiteId(); if ($attribute == 'price' && $storeId != 0) { $customerGroup = Mage::getSingleton('customer/session')->getCustomerGroupId(); $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); } else { parent::setOrder($attribute, $dir); } return $this; }