Si lo que buscas es un script que te permita importar datos a Prestashop desde un ERP, fuentes CSV/XML o varios proveedores, lee este otro post.
Estoy en pleno desarrollo de una tienda virtual con Prestashop para un cliente del sector de la ferretería. El cliente tiene su aplicación de gestión de productos en el servidor de la empresa y la base de datos de estos debe de ser sincronizada con el e-commerce de forma automática de modo que cualquier modificación en la misma se vea actualizada en la base de datos del Prestashop.
Inicialmente había pensado en la posibilidad de hacer un script que sincronizara las dos bases de datos conectando directamente con ellas pero visto que el Prestashop dispone de un módulo de importación a partir de ficheros CSV, he decidido utilizarlo.
En esta arquitectura existen dos partes, la parte del cliente situada en el servidor local de la empresa y la parte de la tienda virtual situada en un alojamiento web, que entre otras cosas requiere dar de alta reglas en el firewall para permitir conectar al Mysql desde una IP externa, cosa que finalmente no necesitaremos.
En la parte del cliente programaré un script que exporte en el formato CSV, esperado por Prestashop, tanto las categorías como los productos -en este caso lo único que necesito exportar- y que suba ambos ficheros al servidor donde está ubicada la tienda.
En la parte de la tienda virtual se requiere un script que sea capaz de lanzar el proceso de importación y es el que describiré a continuación.
Existía la posibilidad, en esta segunda parte, de simular la navegación utilizando CURL, haciendo el login y posterior proceso de importación, pero complica mucho más las cosas cuando lo que necesitamos es simplemente llamar a la clase AdminImport y utilizar su funcionalidad.
Aquí dejo el código del script que, situado en la parte de la tienda, lanza una importación de un fichero CSV productos (pro.csv) o categorías (cat.csv), según se le indique por GET[‘entity’]
Los ficheros CSV a importar deben encontrarse en el directorio /admin/import mientras que nuestro script debe de estar situado en el directorio /admin del Prestashop.
Espero que le pueda (re)servir a alguien.
<?php define('PS_ADMIN_DIR', getcwd()); include(PS_ADMIN_DIR.'/../config/config.inc.php'); include(PS_ADMIN_DIR.'/functions.php'); include_once './tabs/AdminImport.php'; if (!isset($_GET['entity'])) die(); $import = New AdminImport(); switch ($_GET['entity']) { case 0: loadCategoriesPost(); $import->categoryImport(); break; case 1: loadProductsPost(); $import->productImport(); break; default: die(); break; } function loadCategoriesPost() { $_POST = array ( 'tab' => 'AdminImport', 'skip' => '0', 'csv' => 'cat.csv', 'convert' => '', 'entity' => '0', 'separator' => ';', 'multiple_value_separator' => ',', 'import' => 'Importar datos CSV', 'type_value' => array ( 0 => 'id', 1 => 'active', 2 => 'name', 3 => 'parent', 4 => 'description', 5 => 'meta_title', 6 => 'meta_keywords', 7 => 'meta_description', 8 => 'link_rewrite', 9 => 'image', ), ); } function loadProductsPost() { $_POST = array ( 'tab' => 'AdminImport', 'skip' => '0', 'csv' => 'pro.csv', 'convert' => '', 'entity' => '1', 'separator' => ';', 'multiple_value_separator' => ',', 'import' => 'Importar datos CSV', 'type_value' => array ( 0 => 'id', 1 => 'active', 2 => 'name', 3 => 'category', 4 => 'price_tex', 5 => 'tax_rate', 6 => 'wholesale_price', 7 => 'on_sale', 8 => 'reduction_price', 9 => 'reduction_percent', 10 => 'reduction_from', 11 => 'reduction_to', 12 => 'reference', 13 => 'supplier_reference', 14 => 'supplier', 15 => 'manufacturer', 16 => 'ean13', 17 => 'ecotax', 18 => 'weight', 19 => 'quantity', 20 => 'description_short', 21 => 'description', 22 => 'tags', 23 => 'meta_title', 24 => 'meta_keywords', 25 => 'meta_description', 26 => 'available_now', 27 => 'available_later', 28 => 'image', 29 => 'no', ), ); } ?> |
Hay una alternativa a este script que permite importar los datos a Prestashop desde un ERP, fuentes CSV/XML o múltiples fuentes, como proveedores de drop shipping.
Para saber más haz click aquí
Antes que nada, gran trabajo el script y concretamente a mí, al adaptarlo a mis webs me ha ahorrado un tiempo que no tiene precio.
Estoy en las misma situación que algunos de vosotros. Con la versión 1.5 han echo cambios sustanciales no solamente en los directorios sinó en muchos lugares de la que ahora es la clase AdminImportController.php.
Mis conocimientos de php tienen límite y se me hace un mundo adaptar el script ya que no tengo horas disponibles.
Si entre todos podemos ir sacándolo sería genial. Por mi parte al intentar crear la clase de esta forma:
$import = New AdminImportControllerCore();
me peta el código y no se por dónde seguir ya que me falta mucha información sobre las novedades del controlador.
A ver si lo sacamos ya que este trabajo ahora tiempo y dinero a los que no tenemos tantos recursos 😉
Tú lo has dicho. Esto ahorra mucho trabajo.
No obstante en algunos trabajos yo he optado por una script de importación específico para cada caso, atacando directamente a base de datos. Yo de ti, no lo descartaría 😉
Santi
hola a todos, gracias por los aportes, todos los comentarios son muy valiosos…
yo por mi parte voy a tratar de ensuciarme un poco las manos estos días que restan de la semana y de la próxima, en intentar adaptar el script a la ultima versión de PS, aquí mismo iré posteando mis avances para talvez entre todos lograr hacerlo funcionar… o al menos ir definiendo la dirección que debemos seguir para lograrlo…
saludos y felices programadas a todos, en cuanto tenga avances posteo mis resultados…
atte: Erick Salazar
Lo prometido es deuda.
He conseguido hacer una incorporación en PrestaShop 1.5 , eso si con matices. Aun haciendo la incorporación bien, parece como si el script no acabara y sigue en la situación “Conectando o Esperando”.
Si consulto las modificaciones se han realizado bien en PrestaShop.
Lo siento pero como dije no soy programador de PHP y seguro que en algún sitio la estoy cagando.
categoryImport();
break;
case 1:
loadProductsPost();
$import->productImport();
break;
default:
die();
break;
}
exit();
function loadCategoriesPost() {
$_POST = array (
‘tab’ => ‘AdminImport’,
‘skip’ => ‘0’,
‘csv’ => ‘cat.csv’,
‘convert’ => ”,
‘entity’ => ‘0’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘import’ => ‘Importar datos CSV’,
‘type_value’ =>
array (
0 => ‘id’,
1 => ‘active’,
2 => ‘name’,
3 => ‘parent’,
4 => ‘description’,
5 => ‘meta_title’,
6 => ‘meta_keywords’,
7 => ‘meta_description’,
8 => ‘link_rewrite’,
9 => ‘image’,
),
);
}
function loadProductsPost() {
$_POST = array (
‘tab’ => ‘AdminImport’,
‘skip’ => ‘0’,
‘csv’ => ‘pro.csv’,
‘convert’ => ”,
‘entity’ => ‘1’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘import’ => ‘Importar datos CSV’,
‘type_value’ =>
array (
0 => ‘id’,
1 => ‘active’,
2 => ‘name’,
3 => ‘category’,
4 => ‘price_tin’,
5 => ‘tax_rate’,
6 => ‘wholesale_price’,
7 => ‘on_sale’,
8 => ‘reduction_price’,
9 => ‘reduction_percent’,
10 => ‘reduction_from’,
11 => ‘reduction_to’,
12 => ‘reference’,
13 => ‘supplier_reference’,
14 => ‘supplier’,
15 => ‘manufacturer’,
16 => ‘ean13’,
17 => ‘upc’,
18 => ‘ecotax’,
19 => ‘weight’,
20 => ‘quantity’,
21 => ‘description_short’,
22 => ‘description’,
23 => ‘tags’,
24 => ‘meta_title’,
25 => ‘meta_keywords’,
26 => ‘meta_description’,
27 => ‘link_rewrite’,
28 => ‘available_now’,
29 => ‘available_later’,
30 => ‘available_for_order’,
31 => ‘date_add’,
32 => ‘show_price’,
33 => ‘image’,
34 => ‘delete_existing_images’,
35 => ‘features’,
),
);
}
?>
Saludos
Jorge
PD. Ojo que solo he probado los productos (no las categorias y que mis precios son con IVA incluido).
Lo prometido es deuda.
He conseguido hacer una incorporación en PrestaShop 1.5 , eso si con matices. Aun haciendo la incorporación bien, parece como si el script no acabara y sigue en la situación “Conectando o Esperando”.
Si consulto las modificaciones se han realizado bien en PrestaShop.
Lo siento pero como dije no soy programador de PHP y seguro que en algún sitio la estoy cagando.
[code]
?php
define(‘_PS_ADMIN_DIR_’, getcwd());
include(_PS_ADMIN_DIR_.’/../config/config.inc.php’);
include(_PS_ADMIN_DIR_.’/functions.php’);
include_once ‘../controllers/admin/AdminImportController.php’;
if (!isset($_GET[‘entity’])) die();
$import = New AdminImportControllerCore();
switch ($_GET[‘entity’]) {
case 0:
loadCategoriesPost();
$import->categoryImport();
break;
case 1:
loadProductsPost();
$import->productImport();
break;
default:
die();
break;
}
exit();
function loadCategoriesPost() {
$_POST = array (
‘tab’ => ‘AdminImport’,
‘skip’ => ‘0’,
‘csv’ => ‘cat.csv’,
‘convert’ => ”,
‘entity’ => ‘0’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘import’ => ‘Importar datos CSV’,
‘type_value’ =>
array (
0 => ‘id’,
1 => ‘active’,
2 => ‘name’,
3 => ‘parent’,
4 => ‘description’,
5 => ‘meta_title’,
6 => ‘meta_keywords’,
7 => ‘meta_description’,
8 => ‘link_rewrite’,
9 => ‘image’,
),
);
}
function loadProductsPost() {
$_POST = array (
‘tab’ => ‘AdminImport’,
‘skip’ => ‘0’,
‘csv’ => ‘pro.csv’,
‘convert’ => ”,
‘entity’ => ‘1’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘import’ => ‘Importar datos CSV’,
‘type_value’ =>
array (
0 => ‘id’,
1 => ‘active’,
2 => ‘name’,
3 => ‘category’,
4 => ‘price_tin’,
5 => ‘tax_rate’,
6 => ‘wholesale_price’,
7 => ‘on_sale’,
8 => ‘reduction_price’,
9 => ‘reduction_percent’,
10 => ‘reduction_from’,
11 => ‘reduction_to’,
12 => ‘reference’,
13 => ‘supplier_reference’,
14 => ‘supplier’,
15 => ‘manufacturer’,
16 => ‘ean13’,
17 => ‘upc’,
18 => ‘ecotax’,
19 => ‘weight’,
20 => ‘quantity’,
21 => ‘description_short’,
22 => ‘description’,
23 => ‘tags’,
24 => ‘meta_title’,
25 => ‘meta_keywords’,
26 => ‘meta_description’,
27 => ‘link_rewrite’,
28 => ‘available_now’,
29 => ‘available_later’,
30 => ‘available_for_order’,
31 => ‘date_add’,
32 => ‘show_price’,
33 => ‘image’,
34 => ‘delete_existing_images’,
35 => ‘features’,
),
);
}
?
[/code]
Saludos
Jorge
PD. Ojo que solo he probado los productos (no las categorias y que mis precios son con IVA incluido).
He probado el script y no consigo instanciar la clase AdminImportControllerCore(); estoy en las mismas. No se si es problema de permisos, privacidades y demás, pero el caso es que no hay manera.
Alguna sugerencia?
A mi me pasa algo curioso, en un servidor de pruebas me lo genera todo correctamente (1209 productos y 64 categorias) y en otro servidor me carga únicamente unos pocos articulos (59).
Solucionado mi problema
¿Alguien seria tan amable de pasarme el script completo para 1.5 y la informacion necesaria para instalarlo, teniendo en cuenta que no se nada de programacion?
Muchas gracias
Hola Manuel,
me consta que el compañero Juan lo tenía resuelto.
A ver si hay suerte.
Un saludo,
Santi (aka @vigoncas)
¿El correo que me pones es el de Juan?
Hola Manuel,
no, Juan es el usuario del comentario número 74.
Un saludo,
Santi
¿No podrias ponerme en contacto con el?
Tiene la web http://www.sexshopexclusive.com/
Seguro que allí le puedes contactar.
Muchas gracias
Cuando carga las categorías me añade al campo “date_add” valores nulos por lo que se queda como ‘0000-00-00 00:00:00’.
Esto impide que después se puedan modificar desde el backoffice las categorías.
¿Le pasa esto a alguien más?
¿Alguna solución?
Gracias
Hola, he visto este script y si consigo que me funcione me solucionaria la vida, estoy probando en prestashop versión 1.5.3.1 pero cuando ejecuto el script por el navegador se me queda un rato como ejecutandolo pero al final no me muestra ningún error y tampoco me mete ningún producto.
Para la versión 1.5.3.1 deberia de funcionar?
He usado el código que pone Jorge en el post Nº 73
Alguna idea?
Gracias
Ya funciona, era problema de la posición de los campos en el CSV.
Lo que no consigo es poder asignar el ‘id’ a los productos, aunque si tengo el campo correspondiente tanto en el CSV como en el php para importar, lo que me hace es que le asigna el solo incrementando el número de uno en uno y yo quiero poder asignarle el número que indique en el CSV.
El campo correcto supongo que es 0 => ‘id’, ¿hay que hacer algo para que me ponga el id que yo quiera?
Hola Antonio,
te recomiendo que bucees en las tripas del core. Si no es posible gobernar el campo ID se verá claramente.
Un saludo,
Santi (@vigoncas)
Buenas a todos. He seguido vuestros comentarios y gracias a el he podido terminar el script para la 1.5. Incluyendo fabricantes y proveedores. Lo pongo completo para el que le pueda hacer falta. Lleva también un pequeño “loading.gif” mientras se ejecuta y un redireccionamiento cuando termina a la página que se le diga. Espero os ayude.
<?php
echo '’;
ob_flush();
flush();
define(‘_PS_ADMIN_DIR_’, getcwd());
include(_PS_ADMIN_DIR_.’/../config/config.inc.php’);
include(_PS_ADMIN_DIR_.’/functions.php’);
include_once ‘../controllers/admin/AdminImportController.php’;
if (!isset($_GET[‘entity’])) die();
set_time_limit(0);
$import = New AdminImportControllerCore();
switch ($_GET[‘entity’]) {
case 0:
loadCategoriesPost();
$import->categoryImport();
break;
case 1:
loadProductsPost();
$import->productImport();
break;
case 5:
loadManufacturersPost();
$import->manufacturerImport();
break;
case 6:
loadSuppliersPost();
$import->supplierImport();
break;
default:
die();
break;
}
?>
window.location=”http:xxxxxx.xxx”;
‘AdminImport’,
‘skip’ => ‘0’,
‘csv’ => ‘categories_import.csv’,
‘convert’ => ‘1’,
‘entity’ => ‘0’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘forceIDs’ => ‘1’,
‘import’ => ‘Importar datos CSV’,
‘type_value’ =>
array (
0 => ‘id’,
1 => ‘active’,
2 => ‘name’,
3 => ‘parent’,
4 => ‘root_category’,
5 => ‘description’,
6 => ‘meta_title’,
7 => ‘meta_keywords’,
8 => ‘meta_description’,
9 => ‘url_rewrite’,
10 => ‘image’,
11 => ‘shop’,
),
);
}
function loadProductsPost() {
$_POST = array (
‘tab’ => ‘AdminImport’,
‘skip’ => ‘0’,
‘csv’ => ‘products_import.csv’,
‘convert’ => ‘1’,
‘entity’ => ‘1’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘forceIDs’ => ‘1’,
‘import’ => ‘Importar datos CSV’,
‘type_value’ =>
array (
0 => ‘id’,
1 => ‘active’,
2 => ‘name’,
3 => ‘category’,
4 => ‘price_tin’,
5 => ‘tax_rate’,
6 => ‘wholesale_price’,
7 => ‘on_sale’,
8 => ‘reduction_price’,
9 => ‘reduction_percent’,
10 => ‘reduction_from’,
11 => ‘reduction_to’,
12 => ‘reference’,
13 => ‘supplier_reference’,
14 => ‘supplier’,
15 => ‘manufacturer’,
16 => ‘ean13’,
17 => ‘upc’,
18 => ‘ecotax’,
19 => ‘weight’,
20 => ‘quantity’,
21 => ‘description_short’,
22 => ‘description’,
23 => ‘tags’,
24 => ‘meta_title’,
25 => ‘meta_keywords’,
26 => ‘meta_description’,
27 => ‘link_rewrite’,
28 => ‘available_now’,
29 => ‘available_later’,
30 => ‘available_for_order’,
31 => ‘date_add’,
32 => ‘show_price’,
33 => ‘image’,
34 => ‘delete_existing_images’,
35 => ‘features’,
36 => ‘enabled_internet’,
37 => ‘state’,
38 => ‘shop’,
),
);
}
function loadManufacturersPost() {
$_POST = array (
‘tab’ => ‘AdminImport’,
‘skip’ => ‘0’,
‘csv’ => ‘manufacturers_import.csv’,
‘convert’ => ‘1’,
‘entity’ => ‘5’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘forceIDs’ => ‘1’,
‘import’ => ‘Importar datos CSV’,
‘type_value’ =>
array (
0 => ‘id’,
1 => ‘active’,
2 => ‘name’,
3 => ‘description’,
4 => ‘short_description’,
5 => ‘meta_title’,
6 => ‘meta_keywords’,
7 => ‘meta_description’,
8 => ‘shop’,
),
);
}
function loadSuppliersPost() {
$_POST = array (
‘tab’ => ‘AdminImport’,
‘skip’ => ‘0’,
‘csv’ => ‘suppliers_import.csv’,
‘convert’ => ‘1’,
‘entity’ => ‘6’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘forceIDs’ => ‘1’,
‘import’ => ‘Importar datos CSV’,
‘type_value’ =>
array (
0 => ‘id’,
1 => ‘active’,
2 => ‘name’,
3 => ‘description’,
4 => ‘short_description’,
5 => ‘meta_title’,
6 => ‘meta_keywords’,
7 => ‘meta_description’,
8 => ‘shop’,
),
);
}
?>
Genial aportación Grigori 😉
Parece que algunas partes no se han copiado bien.
El primer “echo” del codigo es para que pongais vuestro gif animado de carga.
Y la otra linea seria la de window.location que seria un script javascript.
Un saludo.
¿A alguien le pasa que cada vez que lanzo el script para productos se vinculan todos los productos a la categoría “Inicio”?
Previamente tengo creadas todas las categorías y la segunda vez que lo lanzo, los productos aparecen bien con sus categorías correspondientes.
Me pasa algo RARÍSIMO!, cuando los productos tienen una cantidad superior a 3 me crea/actualiza correctamente pero cuando es inferior, me crea/actualiza el producto pero se cuelga el script y no continua con el siguiente producto.
He provado el mismo .cvs por el la pagina de importacion original y va a las mil maravillas.
¿Alguien sabe porque? (se que parece que sea cagada mia pero estoy casi seguro que tiene que ser algo en memoria o un bug de mi version 1.5.3)
Yo he probado a implantarlo en la versión 1.5.3.1
Pero me da un error y buscando el origen del error lo que sucede es que dentro de la clase AdminController se usa la variable $this->context->employee y varios sitios donde se usan genera el error, cocretamente pego uno de ellos
Fatal error: Call to a member function isLoggedBack() on a non-object in /var/www/vhosts/mijugueteriaerotica.com/httpdocs/classes/controller/AdminController.php on line 1727
No entiendo porqué a los demás no os da el error, hacéis algo adicional a lo que se ve en éste hilo??
Hola a todos, en mi caso yo hago diferentes capturas de diferentes mayoristas, y hay productos de varios mayoristas que van a la misma categoria, el problema esta en que tengo que eliminar los productos de esa categoria he insertar los nuevos productos por que se puede dar el caso que tenga un producto en stock y ya no esta por que el mayorista lo ha quitado entonces ese producto no se actualiza y sigue apareciendo como que existe.
La solucion es elimino todos manualmente y actualizo a la vez todos los productos, pero tengo que partir en bloques de 850 productos para que no se cuelgue la importacion, mi pregunta es ¿este script la carga la hace de una vez o lee el csv por bloques? no se si me explico si lee un csv con 2000 productos y los actualiza en paquetes de 500.
saludos
El script en principio procesa todo el CSV pero partirlo en bloques debería de ser relativamente fácil.
Espero haberte ayudado,
Santi (aka @vigoncas)
Hola, Santi, no entiendo mucho de esto, me gustaria saber si el script es utilizable sin modificar nada o si tengo que añadir algo y en que lugar del script para que funcione.
Tengo Prestashop 1.5.2.
Hola,
por falta de tiempo y porque no he vuelto a necesitar el script estoy muy desconectado de su evolución. No obstante, algún compañero del blog, como se puede leer más arriba, ha colgado una versión que aparentemente debería de funcionar en una 1.5.x
Espero haberte ayudado.
Santi
Hola he visto que en el numero: 88 el amigo Grigori tiene colgado un script para la version 1.5, tengo hecha mi tienda con el Prestashop 1.5.2, hasta ahí bien, pero…tengo que configurar algo y como debo de hacerlo?.
Gracias.
Hola Francisco,
se requiere de algunos conocimientos de programación para montar y hacer funcionar el script. Espero haberte ayudado.
Un saludo
Hola,
Para empezar me gustaría agradecer de antemano vuestro tiempo y sobre todo la dedicación del programador del script. Dicho lo cual, explico lo que me ocurre.
Versión 1.4.9 de Prestashop.
Pongo script del articulo en /admin
Pongo CSV en /admin/import
Pongo la url: http://www.midominio.com/admon/script.php?entity=1
Comienza a cargar y de ponto se me queda la página en blanco y no importa absolutamente nada. He visto que le pasada a otro usuario he puesto el código indicado para que me diera los errores y no me ha dado ningún error, además he puesto “alert” por todas partes del script por si en algún momento no llegaba a un punto y nada siempre me ha saltado el alert pero la página se queda en blanco y no se hace ninguna importación en los productos ¡Me estoy volviendo loca!
¿Como puedo solucionarlo? Gracias de antemano.
A bote pronto lo único que se me ocurre es seguir intentando depurar el código. Ir linea por linea hasta encontrar donde está el problema.
A ver si a alguien lo ha pasado algo similar.
Contestando al post 100 (anabel), activa la visualización de los errores en el archivo config.inc.php
BUSCA ESTO
/* Debug only */
@ini_set(‘display_errors’, ‘off’);
define(‘_PS_DEBUG_SQL_’, false);
Y CAMBIALO POR ESTO
/* Debug only */
@ini_set(‘display_errors’, ‘on’);
define(‘_PS_DEBUG_SQL_’, true);
De esa manera esa pantalla que te aparece en blanco te mostrará los errores que hacen detenerse el script sin llegar a visualizar ningún error.
Hola.
Tenemos un programa de gestión propio y queremos vincularlo con Prestashop para que todo se actualice automáticamente.
He estado leyendo vuestros mensajes pero tengo conocimientos básicos de PHP y me pierdo con algunas cosas.
Había pensado en modificar la base de datos directamente con SQL desde nuestro programa de Visual Basic. Sabéis si es muy problemático?
Sino, imagino que los archivos CSV van en la misma carpeta que el Script, verdad? Cabría la posibilidad de que alguien me enviase por email el script final para la versión 1.4.8.2? (Si además tenéis una pequeña explicación de como usarlo os lo agradecería muchisimo!!)
Saludos y gracias.
Jordi (web@almacendeoficina.com)
Hola Jordi,
cuando desarrollé este script la idea era utilizar en un sincronizador entre un ERP y el Prestashop pero finalmente decidí descartarlo y realizar inserciones directamente en la bdd. Depende de la información que necesites migrar puede resultarte mejor opción, sobretodo teniendo en cuenta que te permite tener más control del desarrollo.
Espero haberte ayudado 😉
@vigoncas
En cuanto al Script he visto que va en admin y el CSV en admin/import.
Hola admin.
Gracias por la respuesta, yo también prefiero manipular directamente la base de datos pero me daba miedo que hubiese problemas de vinculaciones en las tablas y para insertar 1 producto o categoría tuviese que meter registros en media base de datos.
Sabes si hay algún sitio donde describan los campos de cada tabla?
Aprovechando la ocasión, actualmente estoy en 1and1 y no permite el acceso externo a las bases de datos. Me podrías aconsejar algún otro proveedor que esté bien en relación calidad/precio?
Saludos.
Hola Jordi,
vi algo al respecto del diseño de la base de datos hace un tiempo pero no sabría indicarte. Pregúntale a San Google que seguro que te ayuda.
Respecto al acceso directo a base de datos, en un servidor compartido será complicado. Igual tienes que ir a un dedicado aunque la verdad es que no puedo indicarte.
Yo en mi caso, aunque tenía acceso a la bdd prefería programar una especie de RESTful en la parte del server que se encarga de procesar las operaciones de sincronización contra la bdd. Un poco más tedioso que atacar directamente a base de datos pero tampoco tanto 😉
Suerte
@vigoncas
El script de Grigori funciona correctamente con la versión 1.5.3. Sin embargo hoy he actualizado a la 1.5.4 y ya no funciona. Me tira el siguiente error:
Fatal error: Cannot redeclare class AdminImportControllerCore in C:\wamp\www\prestashop\controllers\admin\AdminImportController.php on line 2817
¿Alguien le ha encontrado solución?
Me uno a la petición de Pablo, he instalado la versión 1.5.4 de prestashop y al poner el script de importacion me aparece:
Cannot redeclare class AdminImportControllerCore in /var/www/vhosts/dominio.com/httpdocs/controllers/admin/AdminImportController.php on line 2868
Por favor agradeceriamos respuesta y muchas gracias.
Saludos.
Angel
hi guys it’s run correctly!!!
Thanks for yours help. finally i have a script for the automatic import of csv file in prestashop.
“Ciao” from Italy!!!!
Lo primero, muchas gracias por el aporte, para los que nos estamos iniciando en PHP y Prestashop nos es de gran ayuda, y de paso aprovecho para unirme a la peticion de Pablo y Angel para ver si nos puedes orientar sobre como adaptarlo a la nueva version de Prestashop.
Un saludo y de nuevo enhorabuena.
Para Angel y Roger. Lo único que hay que hacer es eliminar todas las palabras “core” del script.
Necessito ayuda! Me a funcionado perfectamente el código del código del comentario 88 pero, Como hago para subir el CVS de Combinaciones? (Tallas…)
e buscado en controllers/adminimport.php pero no he encontrado ninguna función para importarlo. Ayuda pls! Gracias!
Conseguido! 😀
Añado el código que he utilizado:
function loadCombinacionesPost() {
$numero = count($_POST);
$_POST = array (
‘tab’ => ‘AdminImport’,
‘skip’ => ‘1’,
‘csv’ => ‘combinaciones.csv’,
‘convert’ => ”,
‘entity’ => ‘1’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘import’ => ‘Importar datos CSV’,
‘u’ => ”,
‘type_value’ =>
array (
0 => ‘id_product’,
1 => ‘group’,
2 => ‘attribute’,
),
);
}
y en la parte de arriba:
case 2:
loadCombinacionesPost();
$import->attributeImport();
break;
Muchas Gracias!
Modificar ‘entity’ => ’1′, por ‘entity’ => ’2′,
Buenos días,
Lo primero agradecer todos los aportes.
Y ahora os cuento…
Estoy intentando utilizar esta importación, para solucionar las restricciones de 1and1 de 30s de ejecución, ya que al importar los artículos se me queda colgado…
¿Alguien ha logrado poder hacer que trocee el CSV para ir importandolo de 50 en 50 o 30 en 30?
Yo estoy intentando hacerlo, pero no lo logro, soy programador JAVA y .NET y mi PHP está un poco oxidado…
Gracias!
Hola Carlos,
personalmente prepararía otro script que se encargara de partir el CVS y pasárselo al primero. PHP maneja bastante bien los CSV así que no tienes por qué tener problemas.
Un saludo,
Santi (aka @vigoncas)
Gracias yo estaba modificando el AdminImportController para hacer esto, y la verdad me estaba volviendo loco…
Voy a probar con la forma que me dices, gracias!
Hola de nuevo, a ver si me podéis ayudar.
Tengo partido el CSV en varios trozos pequeños con un script y luego lo importo con lo que se ha colgado por aquí con alguna pequeña modificación… hasta ahí todo ok.
Ahora Necesito y no se muy bien como orientarlo, quep ara poder salvar las limitaciones de 1and1 y su max_execution_time a 30s, lanzar varios hilos diferentes por cada CSV troceado.
¿Alguna sugerencia?He probado muchas cosas y no termino de hacerlo funcionar…
Mil gracias por todo.
No sé si es buena idea eso del multihilo teniendo en cuento que hablamos de una importación pero en cualquier caso una opción es lanzar las peticiones en consola en un bucle bien con shell scripting o bien desde PHP utilizando la función exec() de PHP.
Suerte
Gracias por la respuesta, lo de multi hilo entiendo que no es la mejor opción pero no veo otras.
¿Alguna sugerencia?
Lo de usar EXEC(php …) no me funciona, mi “gran” hosting lo debe tener capado…
Gracias de nuevo.
Desde una máquina externa, la cual controlaras más, podrías lanzar las peticiones en multithreading. Si esto no te sirve, échale un ojo a esto.
http://stackoverflow.com/questions/70855/how-can-one-use-multi-threading-in-php-applications?rq=1
Estoy cargando ahora los Manufacturers y me salta este error:
Fatal error: Cannot access protected property Manufacturer::$id_shop in /var/www/vhosts/bijouxmoda.com/httpdocs/tienda/controllers/admin/AdminImportController.php on line 789
Con carga de productos y categoris no tengo problema, que puedo hacer?
Ahí vas a tener que depurar :-S
Victor, me gustaría ayudarte pero está claro que no tienes la misma versión de Prestashop que yo. En la linea que a ti te da error yo tengo unos comentarios.
Pega aquí el método que te tira el error.
Para Victor
Respecto al comentario 114
¿podrías mandarme el csv que utilizas para la importación de las combinaciones? No consigo ejecutar el proceso de importación de estas. Mi correo es joszalu@gmail.com
Para el comentario 123 yo lo hago así, revisa el nombre del csv aveces falla como se llamen de diferente forma. Espero que te sirva
function loadManufacturersPost(){
$_POST = array (
‘tab’ => ‘AdminImport’,
‘skip’ => ‘0’,
‘csv’ => ‘manufactures_import.csv’,
‘convert’ => ‘1’,
‘entity’ => ‘5’,
‘separator’ => ‘;’,
‘multiple_value_separator’ => ‘,’,
‘forceIDs’ => ‘1’,
‘import’ => ‘Importar datos CSV’,
‘type_value’ =>
array (
0 => ‘id’,
1 => ‘active’,
2 => ‘name’,
3 => ‘description’,
4 => ‘short_description’,
5 => ‘meta_title’,
6 => ‘meta_keywords’,
7 => ‘meta_description’,
8 => ‘shop’,
),
);
}
loadManufacturersPost();
$import->manufacturerImport();
Para el comentario antertior se me olvidó decir que hay que llamarlo mediante el case 5 —-> ‘entity’ => ’5′
Buenos dias.
Os cuento, yo lo que estoy buscando es, en vez de lanzar este proceso para que importe, conectarme directamente a la BD de Prestashop e insertar directamente Productos, Categorias ect. desde mi ERP en mi servidor.
El problema seria saber en que tablas tengo que meter datos. ¿Alguien tiene alguna explicacion de la BD, algun documento que te explique para que sirve cada tabla? Porque entro en la BD, y solo de la parte de productos hay mas de 50 tablas todas relacionadas entre si y con nombres (en mi opinion) poco identificativos.
Cualquier aporte me servira, al menos para saber si lo que quiero hacer es demasiado complicado y lo dejo por imposible o no 🙂
Para Ssoft. Yo empecé igual que tu pero finalmente desistí. Me di cuenta de que es más sencillo usar las clases del core de Prestashop. Te animo a que entres en la carpeta “Classes” y te darás cuenta de que todo viene muy bien organizado y es fácil de usar los métodos.
Hola a tod@s.
Un gran script, pero a mi tambien me aparece la página en blanco.
Añadiendo al fichero config.inc.php el código del post 102 me aparece el siguiente error:
Notice: Use of undefined constant ‘_PS_DEBUG_SQL_’ – assumed ‘‘_PS_DEBUG_SQL_’’ in /homepages/40/d456674083/htdocs/prestashop/config/config.inc.php on line 29
¿ Alguna sugerencia ?
¿ Alguien ha retocado el script para corregir o mejorarlo ?
Gracias.
Hola, estoy realizando pruebas para cargar categorías desde el script.
El fichero que estoy utilizando esta bien, porque cuando lo cargo desde el asistente que hay en la parte de administrador de la tienda lo carga correctamente.
Pero al cargarlo desde el script me aparecen los siguientes errores :
– Este repetido como 30 veces : Warning: key_exists() expects parameter 2 to be array, null given in C:\apache\htdocs\tdemo1\classes\AdminTab.php on line 226
– Y este solo 1 vez : Notice: Trying to get property of non-object in C:\apache\htdocs\tdemo1\classes\AdminTab.php on line 197
Fatal error: código ISO no es correcto
La versión de PS es la 1.4.10.
Por favor ayuda!!!!
saludos.
Hola,
el Fatal error puede venirte por la codificación del fichero. Asegurate de que es UTF8.
Santi (aka @vigoncas)
Hola, he abierto el fichero con notepad ++ y me indica UTF8 🙁 .
Que otra cosa podria ser ??