/** * Prepare crosssell items data * * @return Mage_Catalog_Block_Product_List_Crosssell */ protected function _prepareData() { $product = Mage::registry('product'); /* @var $product Mage_Catalog_Model_Product */ $this->_itemCollection = $product->getCrossSellProductCollection()->addAttributeToSelect(Mage::getSingleton('Mage_Catalog_Model_Config')->getProductAttributes())->addAttributeToSort('position', 'asc')->addStoreFilter()->setVisibility(Mage::getSingleton('Mage_Catalog_Model_Product_Visibility')->getVisibleInCatalogIds()); $this->_itemCollection->load(); foreach ($this->_itemCollection as $product) { $product->setDoNotUseCategoryId(true); } return $this; }
/** * add join to select only in stock products * * @param Mage_Catalog_Model_Resource_Product_Link_Product_Collection $collection collection to add filter * * @return Mage_CatalogInventory_Model_Resource_Stock */ public function setInStockFilterToCollection($collection) { $this->_initConfig(); $manageStock = Mage::getStoreConfig(Mage_CatalogInventory_Model_Stock_Item::XML_PATH_MANAGE_STOCK); $cond = array('{{table}}.use_config_manage_stock = 0 AND {{table}}.manage_stock=1 AND {{table}}.is_in_stock=1', '{{table}}.use_config_manage_stock = 0 AND {{table}}.manage_stock=0'); if ($manageStock) { $cond[] = '{{table}}.use_config_manage_stock = 1 AND {{table}}.is_in_stock=1'; } else { $cond[] = '{{table}}.use_config_manage_stock = 1'; } $collection->joinField('inventory_in_stock', 'cataloginventory/stock_item', 'is_in_stock', 'product_id=entity_id', join(' AND ', array('(' . join(') OR (', $cond) . ')', $this->getReadConnection()->quoteInto('stock_id = ? ', $this->_stock->getId())))); return $this; }
/** * Get current product ids * * @param Mage_Catalog_Model_Resource_Product_Link_Product_Collection $collection * @param string $idFieldName * * @return array */ protected function _getProductIds($collection, $idFieldName) { if ($collection->getProduct() && $collection->getProduct()->getId()) { return array($collection->getProduct()->getData($idFieldName)); } $ids = array(); $product = Mage::registry('product'); if ($product instanceof Mage_Catalog_Model_Product) { $ids[] = $product->getData($idFieldName); } if ($collection->getLinkModel()->getLinkTypeId() == Mage_Catalog_Model_Product_Link::LINK_TYPE_CROSSSELL) { $quote = Mage::getSingleton('checkout/session')->getQuote(); foreach ($quote->getAllItems() as $item) { if ($product = $item->getProduct()) { $ids[] = $product->getData($idFieldName); } } } return $ids; }
/** * Export collection to editable array * * @param Mage_Catalog_Model_Resource_Product_Link_Product_Collection $collection * @return array */ protected function _collectionToEditableArray($collection) { $result = array(); foreach ($collection as $linkedProduct) { $result[$linkedProduct->getId()] = array(); foreach ($collection->getLinkModel()->getAttributes() as $attribute) { $result[$linkedProduct->getId()][$attribute['code']] = $linkedProduct->getData($attribute['code']); } } return $result; }