Saltar al contenido

Migrar Opencart to Prestashop | Cart to Cart

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.

opencart to prestashop

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.

Si tienes que repetir el proceso con varias tiendas tendr谩s que gastarte este dinero m谩s veces.

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.

Este proceso lo tendr谩s que adaptar para tu tienda y tambien para tu versi贸n tanto de Opencart como de Prestashop.

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.

Si quieres bajarte el c贸digo y ahorrarte este paso lo puedes hacer desde el final del post. Ah铆 tienes el c贸digo que he utilizado.

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 Gracias!!