Create simple product and config product programmatically

127 篇文章 0 订阅

1. create simple product function:

 

 public function import_simple_product() {
    	$sql = "select * from bysoft_import_product";
    	$results = $this->_read->fetchAll($sql);
    	
    	$configurable_attribute = "size"; $attr_id = 134;
    	

		foreach ($results as $data) {
    		//check dropdown attribute exists option or not and add .
    		if ($data['model_filter']) {
    			$model_filter = $this->addAttributeValue('model_filter',$data['model_filter']);
    		}
    		if ($data['color']) {
    			$color = $this->addAttributeValue('color',$data['color']);
    		}
    		if ($data['size']) {
    			$size = $this->addAttributeValue('size',$data['size']);
    		}
    		if ($data['usage']) {
    			$usage = $this->addAttributeValue('usage',$data['usage']);
    		}
    		if ($data['edition']) {
    			$edition = $this->addAttributeValue('edition',$data['edition']);
    		}
    		if ($data['specific_usage']) {
    			$specific_usage = $this->addAttributeValue('specific_usage',$data['specific_usage']);
    		}
    		if ($data['style']) {
    			$style = $this->addAttributeValue('style',$data['style']);
    		}
    		
	    	$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($data['attribute_set_id'])
	    	->setCategoryIds($this->getCategoryIds($data)) // Populated further up the script 
	    	->setSku($data['config_sku'] . '-' . $data['size']) // $main_product_data is an array created as part of a wider foreach loop, which this code is inside of 
	    	->setName($data['cn_name']) 
	    	->setData('cn_name',$data['cn_name'])
	    	->setData('en_name',$data['en_name']);
	    	
	    	if ($data['style']) {
	    		$sProduct->setData('style',$style);
	    	}
	    	if ($data['model_filter']) {
	    		$sProduct->setData('model_filter',$model_filter);
	    	}
	    	if ($data['color']) {
	    		$sProduct->setData('color',$color);
	    	}
	    	if ($data['size']) {
	    		$sProduct->setData('size',$size);
	    	}
	    	if ($data['usage']) {
	    		$sProduct->setData('usage',$usage);
	    	}
	    	if ($data['edition']) {
	    		$sProduct->setData('edition',$edition);
	    	}
	    	if ($data['specific_usage']) {
	    		$sProduct->setData('specific_usage',$specific_usage);
	    	}
	    	
	    	$sProduct->setData('price',$data['price']);
	    	$sProduct->setStockData(array('is_in_stock' =>1,'qty' => 99999));   
	    	$sProduct->save();
	    	var_dump('import ' . $sProduct->getSku() . ' successed!');
	    	
    	}
    }

 2. import config product function

    public function import_config_product() {
    	$sql = "SELECT `config_sku` FROM `bysoft_import_product` GROUP BY `config_sku` ";
    	$results = $this->_read->fetchAll($sql);
    	$attr_id = $this->getAttIdByCode('size');
    	foreach ($results as $row) {
    		$config_sku = $row['config_sku'];
    		$simpleProducts = array();
    		$sql = "SELECT * FROM bysoft_import_product WHERE config_sku = ?";
    		$results_simple = $this->_read->fetchAll($sql,array($config_sku));
    		foreach ($results_simple as $rs) {
	    		$sProduct = Mage::getModel('catalog/product')->loadByAttribute('sku', $rs['config_sku'] . '-' . $rs['size']);
	    		$sProduct = Mage::getModel('catalog/product')->load($sProduct->getId());
	    		array_push(
		    		$simpleProducts,
		    		array(
			    		"id" => $sProduct->getId(),
			    		"price" => $sProduct->getPrice(),
			    		"attr_code" => 'size',
			    		"attr_id" => $attr_id, // i have used the hardcoded attribute id of attribute size, you must change according to your store
			    		"value" => $sProduct->getSize(),
			    		"label" => $sProduct->getAttributeText('size'),
		    		)
	    		);
    		}
    		
    		$cProduct = Mage::getModel('catalog/product');
    		$config_sql = "select * from bysoft_import_product where config_sku =? limit 1";
    		$res_config = $this->_read->fetchAll($config_sql,array($config_sku));
    		//check dropdown attribute exists option or not and add .

    		foreach ($res_config as $rc) {   
    			if ($rc['model_filter']) {
    				$model_filter = $this->addAttributeValue('model_filter',$rc['model_filter']);
    			}
    			if ($rc['color']) {
    				$color = $this->addAttributeValue('color',$rc['color']);
    			}
    			if ($rc['size']) {
    				$size = $this->addAttributeValue('size',$rc['size']);
    			}
    			if ($rc['usage']) {
    				$usage = $this->addAttributeValue('usage',$rc['usage']);
    			}
    			if ($rc['edition']) {
    				$edition = $this->addAttributeValue('edition',$rc['edition']);
    			}
    			if ($rc['specific_usage']) {
    				$specific_usage = $this->addAttributeValue('specific_usage',$rc['specific_usage']);
    			}
    			if ($rc['style']) {
    				$style = $this->addAttributeValue('style',$rc['style']);
    			} 
    			
    			$cProduct ->setTypeId('configurable')
    			->setWebsiteIds(array(1))
    			->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
    			->setVisibility(4)
    			
    			->setAttributeSetId($rc['attribute_set_id'])
    			->setCategoryIds($this->getCategoryIds($rc)) // Populated further up the script
    			->setSku($rc['config_sku']) // $main_product_data is an array created as part of a wider foreach loop, which this code is inside of
    			->setName($rc['cn_name'])
    			->setData('cn_name',$rc['cn_name'])
    			->setData('en_name',$rc['en_name'])
    			->setData('description',$rc['description'])
    			->setData('composition',$rc['composition'])
    			->setData('care_description',$rc['care_description'])
    			->setData('season',$rc['season'])
    			->setData('price',$rc['price']);
    			
    			if ($rc['style']) {
    				$cProduct->setData('style',$style);
    			}
    			if ($rc['model_filter']) {
    				$cProduct->setData('model_filter',$model_filter);
    			}
    			if ($rc['color']) {
    				$cProduct->setData('color',$color);
    			}

    			if ($rc['usage']) {
    				$cProduct->setData('usage',$usage);
    			}
    			if ($rc['edition']) {
    				$cProduct->setData('edition',$edition);
    			}
    			if ($rc['specific_usage']) {
    				$cProduct->setData('specific_usage',$specific_usage);
    			}
    			
    			$cProduct->setCanSaveConfigurableAttributes(true);
    			$cProduct->setCanSaveCustomOptions(true);
    			
    			$_attributeIds = array("size" =>$attr_id); 
    				
    			$cProductTypeInstance = $cProduct->getTypeInstance();
    			
    			$cProductTypeInstance->setUsedProductAttributeIds(array($_attributeIds["size"]));
    			
    			$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->setConfigurableAttributesData($attributes_array);
    			$dataArray = array(); 
    			foreach ($simpleProducts as $simpleArray) { 
    				$dataArray[$simpleArray['id']] = array(); 
    				foreach ($attributes_array as $attrArray) { 
    					array_push( $dataArray[$simpleArray['id']], 
    					array( "attribute_id" => $simpleArray['attr_id'], 
    					"label" => $simpleArray['label'], 
    					"is_percent" => false, 
    					"pricing_value" => $simpleArray['price'] ) ); 
    				} 
    			}
    			var_dump('simple data:');
    			var_dump($dataArray);
    			
    			$cProduct->setConfigurableProductsData($dataArray);
    			
    			$cProduct->setStockData(
    					array( 'use_config_manage_stock' => 1, 
    							'is_in_stock' => 1, 
    							'is_salable' => 1 
    							
    			));
    			
    			$cProduct->save();    			
    			var_dump($cProduct->getSku() . ' import success!');
    		}   		    		
    	}
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值