Recientemente estoy migrando una tienda Opencart a Prestashop, y la verdad que parece bastante complicado migrar los productos de una tienda a la otra, pero te mostrar茅 como lo he hecho yo.
Para hacer este proceso m谩s simple existen muchas webs como la famosa Cart2cart que previo desembolso te ayuda con la migraci贸n, aunque no migra opciones ni variaciones de productos. Por lo que la migraci贸n no es tan exitosa como parece. Yo tampoco voy a migrar esta parte porque la tienda a penas utiliza este componente.
El precio que he encontrado para realizar la migraci贸n no est谩 mal, desde 80 Euros a 300 Euros te valen para migrar unos 1000 productos, aunque si tienes 6000, como es mi caso el precio se sube bastante m谩s.
Todos estos procesos son un poco engorrosos, ya que tienes que facilitar tus datos, de ambas webs y subir unos ficheros que ellos utilizan para no tener que darte el Script y que puedas migrar m谩s webs por el mismo precio. Y bueno, no funcionan muy bien con la codificaci贸n de caracteres, por ejemplo 帽 y acentos, aunque se puede resolver f谩cilmente.
Aunque no es un problema de precio, sino que realmente me apetece ver como puedo migrar estos productos desde una tienda Opencart a una tienda Prestashop, y ya de paso voy explicar el proceso que he hecho en este post.
Primero quiero ense帽arte el procedimiento que he hecho, por si quieres modificarlo. Bueno si vas a usarlo siempre debes modificarlo si quieres que funcione con tu base de datos, de todas maneras voy a mostr谩rtelo por partes.
Vamos a ello, la migraci贸n est谩 un pasito m谩s cerca :).
Primero he declarado las variables de los productos que quiero migrar de mi base de datos Opencart.
Son los campos que necesito de las tablas de productos y descripci贸n de productos de Opencart.
-- Variables para almcenar los valores de la SELECT DECLARE v_product_id INT(11); DECLARE v_model VARCHAR(64); DECLARE v_sku VARCHAR(64); DECLARE v_upc VARCHAR(12); DECLARE v_location VARCHAR(128); DECLARE v_quantity INT(4); DECLARE v_stock_status_id INT(11); DECLARE v_image VARCHAR(255); DECLARE v_manufacturer_id INT(11); DECLARE v_shipping tinyint(1); DECLARE v_price DECIMAL(15,4); DECLARE v_points INT(8); DECLARE v_tax_class_id INT(11); DECLARE v_date_available DATE; DECLARE v_weight DECIMAL(5,2); DECLARE v_weight_class_id INT(11) ; DECLARE v_length DECIMAL(5,2); DECLARE v_width DECIMAL(5,2); DECLARE v_height DECIMAL(5,2); DECLARE v_length_class_id INT(11); DECLARE v_subtract tinyint(1); DECLARE v_minimum INT(11) ; DECLARE v_sort_order INT(11) ; DECLARE v_status tinyint(1); DECLARE v_date_added datetime; DECLARE v_date_modified datetime; DECLARE v_viewed INT(5) ; DECLARE v_language_id INT(11); DECLARE v_name VARCHAR(255); DECLARE v_description text; DECLARE v_meta_description VARCHAR(255); DECLARE v_meta_keyword VARCHAR(255); DECLARE v_custom_title VARCHAR(255); -- Variable para controlar el fin del bucle DECLARE findelbucle INTEGER DEFAULT 0; |
Despu茅s preparamos el cursor que va a recuperar los datos de mi tabla Opencart.
DECLARE OpencartByeBye CURSOR FOR SELECT p.`product_id` , `model` , `sku` , `upc` , `location` , `quantity` , `stock_status_id` , `image` , `manufacturer_id` , `shipping` , `price` , `points`, `tax_class_id` , `date_available` , `weight` , `weight_class_id` , `length` , `width` , `height`, `length_class_id`, `subtract` , `minimum` , `sort_order` , `status` , `date_added` , `date_modified`, `viewed` , `name` , `description` , `meta_description`, `meta_keyword` , `custom_title` FROM `product` p, `product_description` d WHERE d.product_id = p.product_id AND d.language_id=4; |
Despu茅s indico al cursor en que variables voy a meter los datos de los productos que quiero que recupere mi cursor.
OPEN OpencartByeBye; bucle: LOOP FETCH OpencartByeBye INTO v_product_id , v_model , v_sku , v_upc , v_location , v_quantity , v_stock_status_id , v_image , v_manufacturer_id , v_shipping , v_price , v_points, v_tax_class_id , v_date_available , v_weight ,v_weight_class_id , v_length , v_width , v_height , v_length_class_id , v_subtract , v_minimum , v_sort_order , v_status , v_date_added , v_date_modified , v_viewed , v_name , v_description ,v_meta_description, v_meta_keyword ,v_custom_title ; IF findelbucle = 1 THEN LEAVE bucle; END IF; |
Y por 煤ltimo voy a meter todos los datos que he recuperado y que me interesan en las diferentes tablas que utiliza Prestashop.
INSERT INTO `ps_product` (`id_product`, `id_supplier` , `id_manufacturer`, `id_category_default`, `id_shop_default` , `id_tax_rules_group`, `on_sale` , `online_only`, `ean13` ,`upc` , `ecotax` , `quantity` , `minimal_quantity`, `price` , `wholesale_price`, `unity` , `reference`,`supplier_reference`, `location` , `width` , `height` , `weight` , `out_of_stock` , `customizable`, `active` ,`redirect_type` ,`available_for_order`, `available_date` , `condition` , `show_price` , `indexed` , `visibility` ) VALUES (v_product_id, v_model , 1 , 2 , 1 , 1 , 1 , 1 , v_sku , v_upc , 0.000000 , v_quantity , 1 , v_price , 0.000000 , '' , v_model , '' , '' , v_width , v_length , 100.000000 , 2 , 0 , 1 , '404' , 1 , '0000-00-00' , 'new' , 1 , 1 , 'both' ); INSERT INTO `ps_product_shop` (`id_product`, `id_shop`, `id_category_default`, `id_tax_rules_group`, `on_sale`, `online_only`, `ecotax`, `minimal_quantity`, `price`, `wholesale_price`, `unity`, `unit_price_ratio`, `additional_shipping_cost`, `customizable`, `text_fields`, `active`, `redirect_type`, `id_product_redirected`, `available_for_order`, `available_date`, `condition`, `show_price`, `indexed`, `visibility`, `date_add`, `date_upd`) VALUES (v_product_id, 1 , 2 , 1 , 1 , 1 , 0.000000, 1 , v_price, 0.000000, '' , 0.000000 , 0.00 , 0 , 0 , 1 , '404' , 0 , 1 , '0000-00-00' , 'new' , 1 , 1 , 'both' , '2014-02-08 17:03:30', '2015-02-12 14:55:54'); INSERT INTO `ps_product_lang` (`id_product`, `id_shop`, `id_lang`, `description`, `description_short`, `link_rewrite`, `meta_description`, `meta_keywords`, `meta_title`, `name`) VALUES (v_product_id, 1 , 4 , v_description , v_meta_description, '' , '' , '' , 'El Titulo' , v_name); INSERT INTO `ps_image` (id_product,POSITION,cover) VALUES (v_product_id , 1 , 1) ; INSERT INTO `ps_image_lang`(`id_image`, `id_lang`, `legend`) SELECT MAX(ID_IMAGE),4,'' FROM ps_image; |
Bien, pues si has visto todo esto, solo tienes que montar tu propio Script con los datos de tu tienda y ejecutarlo en tu base de datos.
Creo que se entiende muy bien, y si tienes conocimientos de bases de datos y SQL pues facilmente migrar谩s los datos de tu Opencart a Prestashop.
Consideraciones para migrar Opencart a Prestashop
Consideraciones a tener en cuenta, pues est谩 hecho para una tienda Opencart en un idioma, por eso est谩n puestos los n煤meros de idiomas a fuego en el c贸digo, por lo que si tienes varios idiomas tendr谩s que modificar el Script.
El id_product no te hace falta ponerlo como lo he hecho yo, deber铆a ser una variable que vaya cambiando cuando se va a帽adiendo un producto, aunque yo los he puesto a fuego en el c贸digo y como no tengo problemas por ello, ya que comprob茅 anteriormente que ning煤n id_product se pisaba con otro.
Te dejo el Script entero aqu铆, para descarg谩rtelo solo tienes que hacer click en una acci贸n social. Gracias.
Si tienes cualquier duda deja un comentario y te las intento resovler 馃檪
Si todo esto te parece un jaleo, y quieres migrar tu tienda de Opencart a Prestashop, o quieres contactar con nosotros puedes hacerlo desde aqu铆.
C贸mo todo este proceso no va a acabar aqu铆, ya que siempre encontrar茅 cosas que mejorar, ir茅 actualizando este post, para que se migren tambi茅n las im谩genes de los productos y se renombren tal y como Prestashop lo hace.
Por 煤ltimo, si te ha parecido 煤til y quieres ayudarme con la web y as铆 poder seguir liberando c贸digo, me gustar铆a que me dieses un +1 en Google plus