import two option simple - config product

这个比较麻烦。有两个可配置想

例如一种鞋子有(尺寸:35,36,37,和颜色:红,黄,蓝)

那么它就有3*3=9种简单商品,还有一个可配置商品

 

public function  importDoubleMixProduct() {
		//获取这种类型的商品ID;
		$read= Mage::getSingleton('core/resource')->getConnection('core_read');
		$sql = "SELECT product_id,COUNT(*) 
				FROM (SELECT product_id,option_id 
				FROM `old_product_option_value` 
				GROUP BY product_id,option_id) AS t1 GROUP BY product_id
				HAVING COUNT(*) = 2
				";
		$results = $read->fetchAll($this->cleanSql($sql));
		foreach ($results as $row) {
			$product_id = (int)$row['product_id'];
			$options = array();
			$att_ids= array();
			$simpleProducts = array();
			$sql_option_name = "SELECT `option_name` 
					FROM`old_product_option_value`
					WHERE product_id = {$product_id}
					GROUP BY option_name";
			$results_option_name = $read->query($sql_option_name);
			foreach ($results_option_name as $ron) {
				$option_name = $ron['option_name'];
				$sql_option_value_name = "
						SELECT `option_value_name` 
						FROM `old_product_option_value`
						WHERE `product_id` = ? AND option_name = ?
						GROUP BY option_value_name
						";
				$results_option_value_name = $read->query($this->cleanSql($sql_option_value_name),array($product_id,$option_name));
				foreach ($results_option_value_name as $rovn) {
					$options[$option_name][] = $rovn['option_value_name'];
				}
			}
			//获取所有option信息
			var_dump($options);
			$option_names = array();//0是第一套属性,1是第二套属性。
			foreach ($options as $option_name=>$option_values) {
				$option_names[] = $option_name;
			}
			
			foreach ($options[$option_names[0]] as $key=>$val) {
				//第一套属性循环
				$attribute_code_1 =  $this->getAttributeCode($option_names[0]);
				$option_value_1 = $this->getOptionId($attribute_code_1, $val);
				$att_id_1 = $this->getAttributeId($option_names[0]);
				if (!in_array($att_id_1,$att_ids)) {
					$att_ids[] = $att_id_1;
				}
				
				
				
				//寻找第二套属性
				foreach ($options[$option_names[1]] as $key2=>$val2) {
					$attribute_code_2 =  $this->getAttributeCode($option_names[1]);
					$option_value_2 = $this->getOptionId($attribute_code_2, $val2);
					$att_id_2 = $this->getAttributeId($option_names[1]);
					if (!in_array($att_id_2,$att_ids)) {
						$att_ids[] = $att_id_2;
					}
					//导入简单商品
					
					$simple_sku = $product_id . '_' . $key.'_' . $key2;
					var_dump($simple_sku);
					//保存简单商品
					//获取产品名
					$sql = "select *
					from `old_data_import`
					WHERE `mid` = ?
					and not `html` is null
					and type = 3
					limit 1";
					
					$product_result = $read->query($sql,array($product_id));
					
					
					
					foreach ($product_result as $row_p) {				
						$cateIds = $this->getCategoryIds($product_id);
						
						//get product name
						$html = new simple_html_dom();
						$html->load($row_p['html']);
						$ret = $html->find('h1.productTitle');
						$product_name = '';
						if (count($ret)) {
							foreach ($ret as $e) {
								$product_name = trim($e->innertext);
								break;
							}
						}
						var_dump('name:' . $product_name);
					
						//get product shortdescription
						$ret_short_desc = $html->find('span.productShortDescription');
						$product_short_desc = '';
						if (count($ret_short_desc)) {
							foreach ($ret_short_desc as $e_short_desc) {
								$product_short_desc= trim($e_short_desc->innertext);
								break;
							}
						}
						var_dump('Short Desc:' . $product_short_desc);
					
						//get product description
						$ret_desc = $html->find('div.productLongDescription');
						$product_desc = '';
						if (count($ret_desc)) {
							foreach ($ret_desc as $e_desc) {
								$product_desc= trim($e_desc->innertext);
								break;
							}
						}
						var_dump('Desc:' . $product_desc);
					
						//get product price
					
						$product_price = 0;
						$sql_price = "select price from old_data_price where product_id=? limit 1";
					
					
						$results_price = $read->query($sql_price,array($row_p['mid']));
						foreach ($results_price as $data_price) {
							$product_price = (float)$data_price['price'];
						}
					
						var_dump('Price:' . $product_price);
					}
					
					
					$sProduct = Mage::getModel('catalog/product')->loadByAttribute('sku',$simple_sku);
					if (!$sProduct) {
						$sProduct = Mage::getModel('catalog/product');
						$sProduct
						->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
						->setWebsiteIds(array(1))
						->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
						->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)
						->setAttributeSetId(4)
						->setCategoryIds($cateIds) // Populated further up the script
						->setSku($simple_sku)
						// $main_product_data is an array created as part of a wider foreach loop, which this code is inside of
						->setName($product_name)
						->setShortDescription($product_short_desc)
						->setDescription($product_desc)
						->setPrice(sprintf("%0.2f", $product_price))
						->setData($attribute_code_1, $option_value_1)
						->setData($attribute_code_2, $option_value_2)
						
						;
					
						
						// Set the stock data. Let Magento handle this as opposed to manually creating a cataloginventory/stock_item model..
						$sProduct->setStockData(array(
								'is_in_stock' =>1,
								'qty' => 99999
						));
							
							
						$sProduct->save();
						$simpleProducts[$sProduct->getId()][] = 
						array(
							"id" =>$sProduct->getId(),
							"price" =>$sProduct->getPrice(),
							"attr_code" =>$attribute_code_1,
							"attr_id" =>$att_id_1, // i have used the hardcoded attribute id of attribute size, you must change according to your store
							"value" =>$option_value_1,
							"label" =>$val
						);
						
					   $simpleProducts[$sProduct->getId()][]=
							array(
							"id" =>$sProduct->getId(),
							"price" =>$sProduct->getPrice(),
							"attr_code" =>$attribute_code_2,
							"attr_id" =>$att_id_2, // i have used the hardcoded attribute id of attribute size, you must change according to your store
							"value" =>$option_value_2,
							"label" =>$val2,
							);
						
							
						$productIds[]=$sProduct->getId();
						var_dump($sProduct->getSku() . ' saved');
					}
					
				}
			}
			//创建可配置商品
			
			//save config product
			$cProduct = Mage::getModel('catalog/product')->loadByAttribute('sku',"c_" . $product_id);
			if (!$cProduct) {
				$cProduct = Mage::getModel('catalog/product');
				$cProduct
				->setTypeId('configurable')
				->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
				->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
				->setWebsiteIds(array(1))
				->setCategoryIds($cateIds)
				->setAttributeSetId(4)
				->setSku("c_" . $product_id)
				->setName($product_name)
				->setShortDescription($product_short_desc)
				->setDescription($product_desc)
				->setPrice(sprintf("%0.2f", $product_price))
				->setUrlKey($product_id)
				;
			
			
			
				// Set stock data. Yes, it needs stock data. No qty, but we need to tell it to manage stock, and that it's actually
				// in stock, else we'll end up with problems later..
				$cProduct->setStockData(array(
						'manage_stock' => 1,
						'is_in_stock' => 1,
						'qty' => 0,
						'use_config_manage_stock' => 0
				));
			
				$cProduct->setCanSaveConfigurableAttributes(true);
				$cProduct->setCanSaveCustomOptions(true);
			
				$cProductTypeInstance = $cProduct->getTypeInstance();
				$attribute_ids = $att_ids;

				
				$cProductTypeInstance->setUsedProductAttributeIds($attribute_ids);
				$attributes_array = $cProductTypeInstance->getConfigurableAttributesAsArray();
				foreach($attributes_array as $key => $attribute_array)
				{
					$attributes_array[$key]['use_default'] = 1;
					$attributes_array[$key]['position'] = 0;
						
					if (isset($attribute_array['frontend_label']))
					{
						$attributes_array[$key]['label'] = $attribute_array['frontend_label'];
					}
					else {
						$attributes_array[$key]['label'] = $attribute_array['attribute_code'];
					}
				}
				// Add it back to the configurable product..
				$cProduct->setCanSaveConfigurableAttributes(1);
				$cProduct->setConfigurableAttributesData($attributes_array);
			
				$dataArray = array();
				foreach ($simpleProducts as $simple_product_id=>$simpleArray) {
					foreach ($simpleArray as $attrArray) {
						$dataArray[$simple_product_id][] = 
						array(
						"attribute_id" => $attrArray['attr_id'],
						"label" => $attrArray['label'],
						"is_percent" => false,
						"value_index" => $attrArray['value'],
						"pricing_value" => $product_price
						);
					}
				}
				var_dump($dataArray);
				
				$cProduct->setConfigurableProductsData($dataArray);
				$cProduct->save();
			
				// Finally...!
			
				var_dump($cProduct->getSku().' data import success');
			
			
				//import product images
				//get images;
				$ret_main_images = $html->find('a.MagicZoom');
				$images = array();
			
				if (count($ret_main_images)) {
					foreach ($ret_main_images as $main_e) {
						$images[]=trim($main_e->href);
					}
				}
			
				//get additionnal images
				$ret_add_images = $html->find('div.productAdditionalImages div.productAdditionalImage img');
				if (count($ret_add_images)) {
					foreach ($ret_add_images as $add_e) {
						$images[] = trim($add_e->src);
					}
				}
			
				$this->importProductImages($images,$cProduct->getSku());
				var_dump($cProduct->getSku() . ' image import successed');
			}
			
			
		}
		
	}

 

 

你可能感兴趣的:(import)