Jump to content

Volcado de productos


piribipipi

Recommended Posts

Hola a todos.

 

Tengo una serie de productos gestionados con un ERP y necesito volcarlos a prestashop.

Necesito ayuda por favor, porque llevo unos dias que no consigo avanzar completamente :S:S

 

El acceso al ERP lo realizo mediante un webservice, se envia una consulta SQL y me devuelve un xml con los resultados. Hasta ahi bien, puedo obtener un xml con toda la informacion de los productos...

 

Mi problema esta en el momento de volcar esa informacion a prestashop. Estaba intentando crear un script y realizar consultas para insertar dichos productos en las tablas que se necesite, pero es un poco "cutre" y aparte de eso siempre existe la posibilidad de olvidar insertar en alguna tabla. Por ejemplo, existe la tabla ps_search_index en la que hay que hacer inserciones y no tengo muy claro como funciona el mecanismo...

 

Alguien me puede echar una mano o ayudarme a encaminar un poco este proceso??

 

Muchas gracias de verdad!

Link to comment
Share on other sites

Lo que tienes que hacer es convertir el XML de tu ERP en un CSV para importarlo en prestashop.

Puedes buscar programas para pasar de XML a CSV (en Google obtendrás varios buscando por : XML to CSV).

Otra forma es construir tu propio script para que lea XML y lo adapte directamente al formato de Prestashop.

Link to comment
Share on other sites

Muchas gracias petete2008.

 

Ya proceso el XML y tengo los datos de los productos. La opcion del CSV no me sirve porque tengo que hacer volcados de datos automaticos, es decir, leer el XML y automaticamente hacer la insercion.

Lo que estoy haciendo es crear un script que a partir de los datos del producto haga inserciones en la base de datos de prestashop en todas las tablas que se requieren...

El unico problema de esto es que puede haber un problema si el numero de productos es alto... aunque de cualquier forma con un numero alto de productos siempre existiria ese problema....

Link to comment
Share on other sites

Si, estás haciendo una tarea cron php que lea un XML e inserte directamente la información en la Base de Datos.

Respecto al timeout que comentas lo puedes solucionar haciendo uso de jquery y la función setInterval y clearInterval.

 

Ejemplo : correr 5 veces una función con intervalos de 20 segundos

 

var count = 0;
function miFuncion() {
   count++;
   if(count> 5) clearInterval(timeout);
   //hacer algo
}
var timeout = setInterval(miFuncion, 20000);

Link to comment
Share on other sites

Muchisimas gracias petete2008 por contestar!

 

No entiendo muy bien tu planteamiento... Es decir, despues de procesar el XML, yo tengo una estructura de datos con la informacion de todos los productos. Como puedo mezclar eso con Jquery?? Disculpa, estoy un poco confuso :S

 

Basicamente lo que yo no quiero es que se supere el tiempo maximo de ejecucion del script que tiene configurado el servidor...

 

Gracias de nuevo por tu paciencia

Link to comment
Share on other sites

Tienes dos opciones :

1 - Hablar con tu proveedor y que te aumente el timescript en el php.ini y no todos aceptaran a poder hacertelo.

2.- Lo que te propuse anteriormente. Mira por ejemplo código de relojes hechos con jquery (por ejemplo http://www.ajaxshake.com/es/JS/238521/como-crear-un-reloj-analogico-con-jquery-analogclock.html). Si abres la web verás un reloj que funciona indefinidamente sin tener en cuenta el timeout. La idea es algo similar, ahora bien, necesitarás conocimientos de jquery,php y javascript y paciencia para desarrollarlo.

Link to comment
Share on other sites

Gracias de nuevo por tu colaboracion petete2008.

 

El ejemplo, aunque no lo he revisado con detalle, creo entender el funcionamiento principal. La duda que sigo teniendo es como implementar eso añadiendole el php... Es decir, el codigo jquery y en general ej javascript se ejecuta en el lado del cliente, y por lo tanto no realiza ninguna conexion al servidor, lo que implica que puede estar ejecutandose todo el tiempo que se desee sin limitacion. Al entrar en juego el php, ya hay que realizar operaciones en el lado del servidor, y por lo tanto ya se depende del tiempo maximo de ejecucion que este determinado por éste.

 

No se si yo me estoy liando o no entiendo realmente la idea que me quieres transmitir :S

 

Saludos

Link to comment
Share on other sites

Anduve haciendo pruebas con tu idea, y parece que funciona bastante bien...

 

El script que cree lo primero que hace es obtener el numero total de productos del ERP. Una vez obtenido, y una vez determinado el valor de la variable "nº de productos por llamada", llama a una funcion recursiva. Esta funcion llama a otro script mediante el metodo post de jquery pasandole el valor de nº de productos por llamada y tambien el indice actual en el que se encuentra el producto. Ese otro script se encarga de volcar los productos que estan dentro de esos parametros y devuelve un valor para indicar que fue exitoso el volcado. Se comprueba que el valor devuelto es correcto y a continuacion se llama de nuevo a la misma funcion con el indice actual del producto actualizado. Esto se realiza hasta que se vuelquen todos los productos.

 

Espero haberme explicado bien... No se si esta era tu idea original pero creo que con ella consigo evitar el problema del limite de tiempo del servidor...

 

Gracias de nuevo por tus comentarios y ayuda!! Si crees que puedo mejorar mi script de alguna forma o quieres comentarme algo, te lo agradezco!:)

Link to comment
Share on other sites

Anduve haciendo pruebas con tu idea, y parece que funciona bastante bien...

 

El script que cree lo primero que hace es obtener el numero total de productos del ERP. Una vez obtenido, y una vez determinado el valor de la variable "nº de productos por llamada", llama a una funcion recursiva. Esta funcion llama a otro script mediante el metodo post de jquery pasandole el valor de nº de productos por llamada y tambien el indice actual en el que se encuentra el producto. Ese otro script se encarga de volcar los productos que estan dentro de esos parametros y devuelve un valor para indicar que fue exitoso el volcado. Se comprueba que el valor devuelto es correcto y a continuacion se llama de nuevo a la misma funcion con el indice actual del producto actualizado. Esto se realiza hasta que se vuelquen todos los productos.

 

Espero haberme explicado bien... No se si esta era tu idea original pero creo que con ella consigo evitar el problema del limite de tiempo del servidor...

 

Gracias de nuevo por tus comentarios y ayuda!! Si crees que puedo mejorar mi script de alguna forma o quieres comentarme algo, te lo agradezco! :)

 

¿Donde esta ese script?

Link to comment
Share on other sites

Ok, os puedo dejar la parte "publica" para que tengais el esqueleto :)

 

El primer script seria algo asi:

<script type="text/javascript">
$(document).ready(function() {

   tamPaginacion= X;	
   limitePrueba=Y;


   guardarProductosPaginado(0, tamPaginacion);

   function guardarProductosPaginado(inicio, tam) {
	   $.post("./productosVolcar.php",{
		   inicio: inicio,
		   tam: tam
	   },
	   function(data) {
		   if(data=="1") {
			   inicioNuevo= inicio+tam;

			   if(inicioNuevo<limitePrueba) {
				   guardarProductosPaginado(inicioNuevo, tam);
			   }
			   else {
				   alert("fin del proceso");
			   }
		   }
		   else {
			   alert("error");
		   }
	   });
   }
  });
</script>

 

El otro script (productosVolcar.php) lo que haria seria consultar el ERP y obtener los productos en funcion de los parametros que se le pasan, y una vez obtenidos realizar las consultas necesarias sobre la base de datos para realizar la insercion (o en caso de existir, la actualizacion).

 

 

Espero que os sea de ayuda :)

 

Saludos

Link to comment
Share on other sites

Si me ha ayudado, conocia ya jquery pero tarde un poco en entender lo que me decias jaja.

 

He hecho la prueba y parece funcionar correctamente.

 

Tengo una duda... en prestashop 1.5.x , para que los productos aparezcan en las busquedas, tienen que estar indexados??

Lo digo porque hay una gran diferencia de tiempo de ejecucion del script cuando realizo el volcado de productos indexados y cuando el volcado es sin indexacion...

Link to comment
Share on other sites

Tengo una duda... en prestashop 1.5.x , para que los productos aparezcan en las busquedas, tienen que estar indexados??

 

Si, sino, me falla la memoria, los productos tienen que estar indexados, sino el buscador no funciona.

 

En la pestaña Preferencias -> Busqueda del panel de administración de tu tienda, puedes ver el numero de los que tienes indexados y tienes opción de indexarlos y reconstruir el indice, ademas te da una dirección, para el cron, y que lo haga automaticamente.

Link to comment
Share on other sites

mmm ok, no me agrada mucho la idea pero bueno jajaa. La verdad que es bastante lento dicho proceso!!

 

Siempre puedo hacer el volcado inicialmente sin indexar y a continuacion ejecutar el script que viene en el backoffice (preferencias/busqueda/indexacion)

 

Gracias por la contestacion :)

Edited by piribipipi (see edit history)
Link to comment
Share on other sites

mmm ok, no me agrada mucho la idea pero bueno jajaa. La verdad que es bastante lento dicho proceso!!

 

Siempre puedo hacer el volcado inicialmente sin indexar y a continuacion ejecutar el script que viene en el backoffice (preferencias/busqueda/indexacion)

 

Gracias por la contestacion :)

 

Ummm

 

Aunque, viene una opción nueva que antes no venia:

 

cachesion1-1024x331.png

 

Aunque creo, que esa opción se refiere a cuando registras un producto desde el mismo back-office o cuando haces las importaciones desde el panel de administración. (No la he probado)

Link to comment
Share on other sites

Exacto, esa opcion es al crear los productos desde el backoffice. Si marcas "no", los productos no se indexan, por lo que si se intenta buscar ese producto, no lo va a encontrar hasta que se ejecute el script de indexacion :S

:D Tocara indexar :D

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...