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:
- Crear un archivo en la instalación de nuestra tienda antigua con el que vamos obtener nuestros productos.
- 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.