piribipipi Posted January 8, 2013 Share Posted January 8, 2013 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 More sharing options...
petete2008 Posted January 8, 2013 Share Posted January 8, 2013 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 More sharing options...
piribipipi Posted January 9, 2013 Author Share Posted January 9, 2013 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 More sharing options...
petete2008 Posted January 9, 2013 Share Posted January 9, 2013 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 More sharing options...
piribipipi Posted January 9, 2013 Author Share Posted January 9, 2013 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 More sharing options...
petete2008 Posted January 9, 2013 Share Posted January 9, 2013 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 More sharing options...
piribipipi Posted January 10, 2013 Author Share Posted January 10, 2013 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 More sharing options...
petete2008 Posted January 10, 2013 Share Posted January 10, 2013 (edited) Desde Jquery puedes hacer una llamada ajax a una consulta de una base de datos o bien ejecutar un fichero determinado. Mira por ejemplo : http://www.funcion13...n-jsonp-jquery/ En google encontraras muchos otros. Ánimo y a empollar!! Ya nos contarás los avances. Edited January 10, 2013 by petete2008 (see edit history) Link to comment Share on other sites More sharing options...
piribipipi Posted January 17, 2013 Author Share Posted January 17, 2013 Bueno, intentare probar a ver que consigo Muchas gracias otra vez por tu colaboracion pepete2008! Link to comment Share on other sites More sharing options...
piribipipi Posted January 17, 2013 Author Share Posted January 17, 2013 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 More sharing options...
Sergio Ruiz Posted January 17, 2013 Share Posted January 17, 2013 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 More sharing options...
piribipipi Posted January 17, 2013 Author Share Posted January 17, 2013 Son scripts que realice yo.... Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted January 17, 2013 Share Posted January 17, 2013 Son scripts que realice yo.... ¿No los compartes en el foro? Link to comment Share on other sites More sharing options...
piribipipi Posted January 17, 2013 Author Share Posted January 17, 2013 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 More sharing options...
petete2008 Posted January 17, 2013 Share Posted January 17, 2013 Veo que has pillado la base de la idea viendo los ejemplos que te envíe. El ejemplo del reloj es muy ilustrativo y seguro que te ha ayudado mucho. ¿Lo has puesto en funcionamiento o estás desarrollandolo todavía? Link to comment Share on other sites More sharing options...
piribipipi Posted January 17, 2013 Author Share Posted January 17, 2013 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 More sharing options...
nadie Posted January 17, 2013 Share Posted January 17, 2013 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 More sharing options...
piribipipi Posted January 17, 2013 Author Share Posted January 17, 2013 (edited) 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 January 17, 2013 by piribipipi (see edit history) Link to comment Share on other sites More sharing options...
nadie Posted January 17, 2013 Share Posted January 17, 2013 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: 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 More sharing options...
piribipipi Posted January 17, 2013 Author Share Posted January 17, 2013 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 Link to comment Share on other sites More sharing options...
nadie Posted January 17, 2013 Share Posted January 17, 2013 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 Tocara indexar Link to comment Share on other sites More sharing options...
Recommended Posts