*/ class Mage_Bundle_Model_Resource_Selection_Collection extends Mage_Catalog_Model_Resource_Product_Collection { /** * Selection table name * * @var string */ protected $_selectionTable; /** * Initialize collection * */ protected function _construct() { parent::_construct(); $this->setRowIdFieldName('selection_id'); $this->_selectionTable = $this->getTable('bundle/selection'); } /** * Set store id for each collection item when collection was loaded * * @return void */ public function _afterLoad() { parent::_afterLoad(); if ($this->getStoreId() && $this->_items) { foreach ($this->_items as $item) { $item->setStoreId($this->getStoreId()); } } return $this; } /** * Initialize collection select * */ protected function _initSelect() { parent::_initSelect(); $this->getSelect()->join(array('selection' => $this->_selectionTable), 'selection.product_id = e.entity_id', array('*') ); } /** * Join website scope prices to collection, override default prices * * @param int $websiteId * @return Mage_Bundle_Model_Resource_Selection_Collection */ public function joinPrices($websiteId) { $adapter = $this->getConnection(); $priceType = $adapter->getCheckSql( 'price.selection_price_type IS NOT NULL', 'price.selection_price_type', 'selection.selection_price_type' ); $priceValue = $adapter->getCheckSql( 'price.selection_price_value IS NOT NULL', 'price.selection_price_value', 'selection.selection_price_value' ); $this->getSelect()->joinLeft(array('price' => $this->getTable('bundle/selection_price')), 'selection.selection_id = price.selection_id AND price.website_id = ' . (int)$websiteId, array( 'selection_price_type' => $priceType, 'selection_price_value' => $priceValue, 'price_scope' => 'price.website_id' ) ); return $this; } /** * Apply option ids filter to collection * * @param array $optionIds * @return Mage_Bundle_Model_Resource_Selection_Collection */ public function setOptionIdsFilter($optionIds) { if (!empty($optionIds)) { $this->getSelect()->where('selection.option_id IN (?)', $optionIds); } return $this; } /** * Apply selection ids filter to collection * * @param array $selectionIds * @return Mage_Bundle_Model_Resource_Selection_Collection */ public function setSelectionIdsFilter($selectionIds) { if (!empty($selectionIds)) { $this->getSelect()->where('selection.selection_id IN (?)', $selectionIds); } return $this; } /** * Set position order * * @return Mage_Bundle_Model_Resource_Selection_Collection */ public function setPositionOrder() { $this->getSelect()->order('selection.position asc') ->order('selection.selection_id asc'); return $this; } }