/** * Returns actual product data: current id, options, options data and option values * * @param Mage_Catalog_Model_Resource_Product_Option_Collection $options * @return array */ protected function _getActualOptionsData(Mage_Catalog_Model_Resource_Product_Option_Collection $options) { $actualOptionId = 0; $actualOptions = array(); // array of type and title types, key is element ID $actualData = array(); // array of option data $actualValues = array(); // array of option values data /** @var $option Mage_Catalog_Model_Product_Option */ foreach ($options->getItems() as $option) { $lastOptionKey = $option->getType() . '|' . $option->getTitle(); $actualOptionId++; $actualOptions[$actualOptionId] = $lastOptionKey; $actualData[$actualOptionId] = $this->_getOptionData($option); if ($optionValues = $this->_getOptionValues($option)) { $actualValues[$actualOptionId] = $optionValues; } } return array('id' => $actualOptionId, 'options' => $actualOptions, 'data' => $actualData, 'values' => $actualValues); }
/** * Load exiting custom options data * * @return Mage_ImportExport_Model_Import_Entity_Product_Option */ protected function _initOldCustomOptions() { if (!$this->_oldCustomOptions) { $oldCustomOptions = array(); $optionTitleTable = $this->_tables['catalog_product_option_title']; $productIds = array_values($this->_productsSkuToId); foreach ($this->_storeCodeToId as $storeId) { $addCustomOptions = function (Mage_Catalog_Model_Product_Option $customOption) use(&$oldCustomOptions, $storeId) { $productId = $customOption->getProductId(); if (!isset($oldCustomOptions[$productId])) { $oldCustomOptions[$productId] = array(); } if (isset($oldCustomOptions[$productId][$customOption->getId()])) { $oldCustomOptions[$productId][$customOption->getId()]['titles'][$storeId] = $customOption->getTitle(); } else { $oldCustomOptions[$productId][$customOption->getId()] = array('titles' => array($storeId => $customOption->getTitle()), 'type' => $customOption->getType()); } }; /** @var $collection Mage_Catalog_Model_Resource_Product_Option_Collection */ $this->_optionCollection->reset(); $this->_optionCollection->addProductToFilter($productIds); $this->_optionCollection->getSelect()->join(array('option_title' => $optionTitleTable), 'option_title.option_id = main_table.option_id', array('title' => 'title', 'store_id' => 'store_id'))->where('option_title.store_id = ?', $storeId); $this->_byPagesIterator->iterate($this->_optionCollection, $this->_pageSize, array($addCustomOptions)); } $this->_oldCustomOptions = $oldCustomOptions; } return $this; }