¿Cómo exportar productos de Prestashop a un archivo CSV?

Exportar productos de Prestashop a un archivo CSV puede ser un procedimiento esencial para diversos fines, como la migración de productos, copias de seguridad, entre otros. La capacidad de almacenar grandes cantidades de información de tiendas en línea hace de Prestashop una herramienta imprescindible para muchos negocios digitales.

Exportar productos de Prestashop

Cómo exportar productos de Prestashop a un archivo CSV 

Para exportar productos de Prestashop, uno de los métodos utilizados es a través del comando del catálogo > productos. Sin embargo, este método no proporciona un archivo completo, ya que solo exporta campos básicos, como identificación, imagen de portada, nombre, referencia, categorías predeterminadas, precio base, precio final, cantidad y estado activo.

En respuesta a esta limitación, una solución alternativa es utilizar el SQL Manager, una herramienta poderosa y flexible que permite realizar consultas a la base de datos y obtener resultados en formato CSV. Con esta herramienta, se pueden gestionar y exportar datos adicionales, como tipos, conjuntos, usuarios, direcciones, fabricantes y proveedores.

Sin embargo, es importante mencionar que el uso de SQL Manager requiere cierto grado de conocimiento y habilidad en MySQL, ya que aunque es una herramienta potente, puede ser compleja para aquellos que no están familiarizados con este sistema de gestión de bases de datos.

Además de la exportación de datos de productos, también puede ser necesario exportar imágenes y otros campos de información. Para ello, existen diversas herramientas y extensiones disponibles que pueden facilitar esta tarea, aunque puede requerir cierto esfuerzo reunir y organizar todos estos datos de manera efectiva.

Es importante mencionar que, aunque estas soluciones pueden ser útiles para exportar datos de Prestashop, es recomendable considerar el uso de soluciones especializadas o servicios profesionales si se enfrenta a una tarea de migración de datos grande o compleja. Esto puede ayudar a evitar errores y asegurar una transición suave y efectiva.

Finalmente, siempre es esencial mantener copias de seguridad de todos los datos y realizar pruebas exhaustivas antes de implementar cualquier cambio a gran escala en su tienda Prestashop.

Cómo debería funcionar la exportación de productos en Prestashop

En este artículo nos centraremos en el proceso de exportación de productos en Prestashop utilizando el método CSV. El proceso implica la interacción con la interfaz de usuario de Back Office, específicamente las secciones «Catálogo» y «Productos». Al finalizar este proceso, obtendrás un archivo CSV que contiene información de los productos de tu tienda.

Exportar productos de Prestashop

Empecemos

Para empezar, Prestashop proporciona una lista de campos compatibles en la sección Back Office > Parámetros avanzados > Importar CSV. Al acceder a esta sección, debes seleccionar la entidad «Productos» y luego podrás ver todos los campos disponibles que se pueden exportar en formato CSV.

Si te interesa obtener una vista previa de cómo se verá un archivo CSV de productos, Prestashop ofrece la opción de descargar archivos CSV de muestra en la misma sección. Solo necesitas desplazarte hacia abajo y seleccionar el archivo «Productos de muestra».

Ahora, vamos a entrar en el núcleo del proceso de exportación. Para exportar productos en Prestashop, el primer paso es modificar el controlador AdminProductsController. Para ello, necesitarás generar un archivo en /override/controllers/admin/AdminProductsController.php e introducir el siguiente código:

php
<?php
class AdminProductsController extends AdminProductsControllerCore{
public function processExport($text_delimiter = '"'){
$this->_orderBy = 'id_product';
$this->fields_list['reference']['title'] = 'Reference #';
parent::processExport($text_delimiter);
}
}
?>

Este código modifica el método processExport() del controlador, que se activa al pulsar el botón de exportación en el Back Office. La primera línea asegura que los productos se ordenen por su ID. También se cambia el nombre del campo de referencia a ‘Reference #’ para que sea compatible con la herramienta de importación CSV.

Finalmente, para asegurarte de que se está utilizando el controlador modificado para la exportación, deberás eliminar el archivo cache/class_index.php.

Es importante recordar que siempre debes hacer una copia de seguridad antes de realizar cualquier modificación en los archivos del servidor. Además, los cambios deben ser realizados por alguien con conocimientos técnicos en programación y en el uso de Prestashop para evitar problemas de funcionamiento o de seguridad en tu sitio web.

¿Qué pasa si me dirijo a ese directorio y el fichero ya existe?

En el caso de que el fichero AdminProductsController.php ya exista, deberás agregar el nuevo código antes del cierre de la etiqueta de PHP ( ?> ). Te recomendaría que antes de modificar cualquier archivo, siempre hagas una copia de seguridad del original para poder restaurarlo en caso de que algo salga mal.

Exportar productos de Prestashop

Si deseas exportar las imágenes de los productos, debes utilizar la función processExport(). Aquí te dejo el código necesario:

php
// Image URLs (x,y,z...)
$this->fields_list['image'] = array(
'title' => $this->l('Image URLs (x,y,z...)'),
'callback' => 'exportAllImagesLink'
);

Donde además se puede crear una función fija en exportAllImagesLink(), así como sigue:

Este código agrega las URL de las imágenes a la lista de campos a exportar y hace referencia a la función exportAllImagesLink(), la cual necesita ser definida en el controlador AdminProductsController.

Aquí está la definición de la función exportAllImagesLink():

php
public static function exportAllImagesLink($cover, $row, $delimiter = ','){
if (empty($row) || empty($row['id_product']) || empty($row['id_image'])) {
return;
}
$id_product = (int) $row[‘id_product’];
$id_shop = Context::getContext()->shop->id;
$query = new DbQuery();
$query->select(‘i.id_image’)
->from(‘image’, ‘i’)
->leftJoin(‘image_shop’, ‘is’, ‘i.id_image = is.id_image AND is.id_shop = ‘ . $id_shop)
->where(‘i.id_product = ‘ . $id_product)
->orderBy(‘i.cover DESC, i.position ASC’);$images = Db::getInstance()->executeS($query);

foreach ($images as $image) {
if (Configuration::get(‘PS_LEGACY_IMAGES’)) {
$links[] = Tools::getShopDomain(true) . _THEME_PROD_DIR_ . $id_product . ‘-‘ . $image[‘id_image’] . ‘.jpg’;
} else {
$links[] = Tools::getShopDomain(true) . _THEME_PROD_DIR_ .Image::getImgFolderStatic($image[‘id_image’]) . $image[‘id_image’] . ‘.jpg’;
}
}

return implode($delimiter, $links);
}

Esta función genera el enlace de todas las imágenes de un producto. Consulta la base de datos para obtener las IDs de todas las imágenes asociadas a un producto y luego crea los enlaces correspondientes para cada una de las imágenes.

Los enlaces se devuelven como una cadena de texto separada por comas. Es importante destacar que esta función tiene en cuenta si se están utilizando imágenes en el formato antiguo de Prestashop.

Exportar todas las imágenes del producto

Para exportar todas las imágenes de los productos en PrestaShop, puedes agregar el campo ‘image’ a la lista de campos para exportar mediante la función processExport(). Aquí tienes el código que debes agregar:

php
// Image URLs (x,y,z...)
$this->fields_list['image'] = array(
'title' => $this->l('Image URLs (x,y,z...)'),
'callback' => 'exportAllImagesLink'
);



Además de lo anterior, se puede crear una función fija con exportAllImagesLink(), así como sigue:

Además, necesitas definir la función exportAllImagesLink(), que será responsable de generar los enlaces de todas las imágenes de un producto. La función consulta la base de datos para obtener los identificadores de todas las imágenes asociadas a un producto y luego genera los enlaces correspondientes para cada imagen.

php
public static function exportAllImagesLink($cover, $row, $delimiter = ','){
if (empty($row) || empty($row['id_product']) || empty($row['id_image'])) {
return;
}
$id_product = (int) $row[‘id_product’];
$id_shop = Context::getContext()->shop->id;
$query = new DbQuery();
$query->select(‘i.id_image’)
->from(‘image’, ‘i’)
->leftJoin(‘image_shop’, ‘is’, ‘i.id_image = is.id_image AND is.id_shop = ‘ . $id_shop)
->where(‘i.id_product = ‘ . $id_product)
->orderBy(‘i.cover DESC, i.position ASC’);$images = Db::getInstance()->executeS($query);

foreach ($images as $image) {
if (Configuration::get(‘PS_LEGACY_IMAGES’)) {
$links[] = Tools::getShopDomain(true) . _THEME_PROD_DIR_ . $id_product . ‘-‘ . $image[‘id_image’] . ‘.jpg’;
} else {
$links[] = Tools::getShopDomain(true) . _THEME_PROD_DIR_ . Image::getImgFolderStatic($image[‘id_image’]) . $image[‘id_image’] . ‘.jpg’;
}
}

return implode($delimiter, $links);
}

Campo Eliminar imágenes existentes (0 = No, 1 = Sí)

Además, si deseas agregar una opción para eliminar o no las imágenes existentes, puedes hacerlo con el siguiente código:

php
// Delete existing images (0 = No, 1 = Yes)
$this->_select .= '0 AS delete_images, ';
$this->fields_list['delete_images'] = array(
'title' => $this->l('Delete existing images (0 = No, 1 = Yes)')
);

Este código agrega un campo llamado ‘delete_images’ a la lista de campos para exportar. Por defecto, el valor de este campo es 0, lo que significa que no se eliminarán las imágenes existentes. Si cambias el valor a 1, entonces las imágenes existentes se eliminarán.

Haga que todos los campos coincidan con los de la herramienta de importación CSV

Para garantizar que todos los campos se alineen con los de la herramienta de importación CSV de PrestaShop, debes ajustar los nombres de los campos durante el proceso de exportación. Puedes usar este código para ajustar los nombres de los campos:

php
// Status is Active (0/1)
$this->fields_list['active']['title'] = 'Active (0/1)';
// Base price is Price tax excluded
$this->fields_list[‘price’][‘title’] = ‘Price tax excluded’;// Final price is Price tax included
$this->fields_list[‘price_final’][‘title’] = ‘Price t

Ordene los campos para asignarlos fácilmente en productos de importación CSV

Para facilitar la asignación de campos durante la importación de CSV, es útil ordenar los campos de manera que coincidan con la herramienta de importación CSV. Aquí se muestra cómo puedes ordenar los campos:

php
static::sortCSVfields($this->fields_list);

Y a continuación, define la función sortCSVfields() de la siguiente manera:

php
public static function sortCSVfields(&$fields){
ksort($fields);
$positions = array(2, 27, 53, 40, 39, 38, 37, 47, 48, 41, 44, 54, 22, 31, 9, 11, 10, 12, 17, 19, 45, 21, 1, 52, 6, 55, 43, 36, 16, 35, 34, 33, 25, 3, 4, 8, 46, 51, 5, 56, 13, 24, 30, 42, 15, 14, 32, 50, 29, 28, 18, 49, 26, 23, 7, 20);
array_multisort($positions, $fields);
}

La función sortCSVfields() reordena los campos según el arreglo de posiciones dado. Esto permite que los campos en el archivo CSV de salida se alineen con los campos en la herramienta de importación CSV de PrestaShop.

Por último, es importante notar que, aunque se ha dispuesto una columna para «Price tax excluded», esta columna debería colocarse al final para garantizar que la herramienta de exportación de productos de PrestaShop funcione correctamente.

Puedes acceder a temas similares, y reforzar conocimientos sobre el tema, en los siguientes enlaces:

Deja un comentario