¿Cómo migrar los productos de Magento 1.9 a Magento 2?

¿Cómo migrar los productos de Magento 1.9 a Magento 2?

La semana pasada os hablamos de las ventajas de actualizar tu tienda en Magento 1.9 a Magento 2 y de por qué deberíamos plantearnos el hacerlo. Cómo lo prometido es deuda, hoy vamos a comenzar con una serie de tutoriales sobre como realizar dicha tarea. En este primer artículo explicaremos cómo actualizar tu magento 1.9 y migrar los productos a una nueva tienda en Magento 2.

¿Que necesito para migrar los productos de mi Magento 1.9 a Magento 2?

Antes que nada os vamos a explicar el procedimiento que vamos a seguir para volcar todos nuestros productos de nuestro Magento 1.9:

  1. Crear un archivo en la instalación de nuestra tienda antigua con el que vamos obtener nuestros productos.
  2. En nuestra nueva tienda en Magento 2 haremos otro archivo para introducirlos todos en ella.

¿Cómo obtengo todos los productos de mi magento 1.9?

Vamos a ponernos en el caso más sencillo en el que tenemos una tienda con todos nuestros artículos son productos simples por lo que no tendríamos que ponernos a agruparlos en configurables, bundles, etc.

Comenzamos añadiendo el archivo Mage.php de nuestro Magento 1.9 y seleccionando la vista de nuestra tienda de la que queramos obtener los productos:

require_once MAGENTO . '/app/Mage.php';
Mage::app()->setCurrentStore(1); 

Tras esto pasaremos a obtener la colección de todos nuestros productos:

$collection = Mage::getModel('catalog/product')->getCollection()
 ->addAttributeToSelect('*')
 ->setPageSize(99999)
 ->setCurPage(1); 

Finalmente recorremos la colección de productos y creamos un array con todos los campos que nos interese obtener para guardar en nuestra migración a Magento 2, esto lo podemos hacer más o menos sencillo según nuestros requisitos, cogiendo o no stock según sea el caso, igual que las categorías, etc.

foreach ($collection as $product) {
	$productos[] = array(
		"sku" => $product->getSKU(),
		"n" => $product->getName(),
		"p" => $product->getPrice(),
		"sp" => $product->getSpecialPrice(),
		"d" => $product->getDescription(),
		"sd" => $product->getShortDescription(),
		"t" => $product->getTypeId(),
		"s" => $product->getStatus(),
		"i" => Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'catalog/product'.$product->getImage(),
		"u" => $product->getProductUrl()
	);

}

echo json_encode($productos);

¿Cómo migro los productos de mi Magento 1.9 en una nueva tienda en Magento 2?

Ahora que tenemos todos los datos que queremos, pasamos a migrar los productos en nuestro nuevo Magento 2 con lo que recogemos de nuestro ecommerce anterior. Comenzamos de igual forma, cargando los archivos necesarios para acceder a la API de Magento 2 y llamamos al archivo que acabamos de crear por cURL:

require __DIR__ . '/app/bootstrap.php';
$params = $_SERVER;
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
$objectManager = $bootstrap->getObjectManager();
$objectManager->get('Magento\Framework\App\State')->setAreaCode("frontend");
$store = $objectManager->get('Magento\Store\Model\StoreManagerInterface')->setCurrentStore(0);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, "URL A NUESTRO SCRIPT DE ANTES");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
if(curl_exec($ch) === false)
{
	echo 'Curl error: ' . curl_error($ch);
	die();
}
else
{
	$result = curl_exec($ch);
	$json = json_decode($result);
}

Y ahora empezamos a recorrer el json de todos los productos que tenemos en nuestro anterior ecommerce y los vamos creando uno a uno:

foreach ($json as $datosProducto) {
	$_product = $objectManager->create('Magento\Catalog\Model\Product');
	$_product->setName($datosProducto->n);
	$_product->setPrice($datosProducto->p);
	$_product->setSpecialPrice($datosProducto->sp);
	$_product->setDescription($datosProducto->d);
	$_product->setShortDescription($datosProducto->sd);
	$_product->setTypeId($datosProducto->t);
	$_product->setStatus($datosProducto->s);

	$imagenNombre = basename($datosProducto->i);
	$contents = file_get_contents($datosProducto->i);


	if ( strlen( $contents ) )
	{
		copy( $datosProducto->i, __DIR__ . '/../pub/media/imagenes/' . $imagenNombre );
		$existeImagen = true;
	}
	if ($existeImagen && file_exists( __DIR__ . '/../pub/media/imagenes/' . $imagenNombre) && @is_array(getimagesize( __DIR__ . '/../pub/media/imagenes/' . $imagenNombre)))
	{
			$_product->addImageToMediaGallery('imagenes/' . $imagenNombre, array('image', 'small_image', 'thumbnail'), true, false);
			$imagenesHijos[] = array("local" => 'imagenes/' . $imagenNombre, "remota" => $datosProducto->i);

	}
	$_product->setProductUrl($datosProducto->u);


	$_product->setAttributeSetId(4);
	$_product->setSku($datosProducto->sku);

	$_product->setWebsiteIds(array(1));
	$_product->setVisibility(4);
	$_product->setWeight(1);

	$_product->save();
}

Con estos simples pasos ya tendríamos migrado nuestros productos de Magento 1.9 a Magento 2. En nuestros siguiente artículos os explicaremos como hacer lo mismo con los pedidos y clientes que tenemos en nuestra tienda antigua.



Escribir un comentario