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.