Exportación de imágenes desde PrestaShop
Es común encontrarse con la necesidad de realizar una carga de los datos desde PrestaShop a Sales Layer. En esos casos es frecuente encontrarse con un problema común a propósito de una peculiaridad de PrestaShop, como es el sistema de nomenclatura de las imágenes. Así, cuando se sube una imagen a PrestaShop, este la almacena mediante un sistema de identificación por carpetas y utilizando un nombre único por imagen.
Por ejemplo:
Para productos:
Para categorías:
Entre tanto, cuando accedes a las mismas imágenes en la tienda, PrestaShop sustituye el identificador de la imagen por el nombre del producto / categoría de este modo:
Es por este motivo que, cuando se exporta de PrestaShop, la URL de la imagen se extrae siguiendo el segundo caso. El problema es que cuando se importa en Sales Layer, como el nombre de la imagen no puede estar duplicado, solo sube una de las repetidas.
Para solucionarlo, hay que acudir al
Configurar > Parámetros Avanzados > Base de datos > Añadir nueva consulta SQL:

Ahí tendremos que insertar una consulta para generar la exportación a formato CSV, que después podemos cargar en Sales Layer (siguiendo los pasos habituales de carga de CSV en Sales Layer). Como ejemplo de la consulta, utilizando un dominio falso de ejemplo (“yourdomain”) tendríamos:
SELECT aux.reference, Group_concat(aux.img SEPARATOR ' ,') AS imagenes
FROM (SELECT p.id_product, p.reference, CASE
WHEN Length(im.`id_image`) = 6 THEN
Concat('https://yourdomain.com', '/img/p/', INSERT(INSERT(INSERT(INSERT(INSERT(im.`id_image`, 2, 0, '/'), 4, 0, '/'), 6, 0, '/'), 8, 0, '/'), 10, 0, '/'), '/', im.`id_image`, '.jpg')
WHEN Length(im.`id_image`) = 5 THEN
Concat('https://yourdomain.com','/img/p/', INSERT(INSERT(INSERT(INSERT(im.`id_image`, 2, 0, '/'), 4, 0, '/'), 6, 0, '/'), 8, 0, '/'), '/', im.`id_image`, '.jpg')
WHEN Length(im.`id_image`) = 4 THEN
Concat( 'https://yourdomain.com', '/img/p/',INSERT(INSERT(INSERT(im.`id_image`, 2, 0, '/'), 4, 0, '/'), 6, 0, '/'), '/', im.`id_image`, '.jpg')
WHEN Length(im.`id_image`) = 3 THEN
Concat('https://yourdomain.com', '/img/p/', INSERT(INSERT(im.`id_image`, 2, 0, '/'), 4, 0, '/'), '/', im.`id_image`, '.jpg')
WHEN Length(im.`id_image`) = 2 THEN
Concat('https://yourdomain.com', '/img/p/',INSERT(im.`id_image`, 2, 0, '/'), '/', im.`id_image`, '.jpg')
WHEN Length(im.`id_image`) = 1 THEN
Concat('https://yourdomain.com', '/img/p/',INSERT(im.`id_image`, 2, 0, '/'), im.`id_image`, '.jpg')
ELSE ''
END AS 'img', im.cover
FROM ps_product p
LEFT JOIN ps_image im ON ( im.id_product = p.id_product )
ORDER BY cover DESC) AS aux
GROUP BY id_product;
Hay dos detalles a tener en cuenta sobre esta sentencia:
- se debe adaptar el dominio en todos los concat de la misma, con la URL base.
- hay que incluir la ordenación por el campo cover en PrestaShop (tal y como se muestra en el ejemplo).