Main menu

Bug al importar productos en Prestashop 1.6

Prestashop es uno de los gestores de contenidos por excelencia en el comercio electrónico. Nos permite crear una o múltiples tiendas online para poder ofrecer otro canal de compra al cliente. También nos permite crear un catálogo online de nuestros productos.

Prestashop ha evolucionado adaptándose a los requerimientos actuales del mercado y de la venta online de productos, se ha convertido en una herramienta muy potente con la que pocos pueden competir. Gracias a su modelo Open Source, es gratuito y hay una gran comunidad detrás que saca mejoras constantemente.

Pero como en todo en esta vida, Prestashop tampoco es perfecto y en ocasiones presenta bugs o errores de programación. Concretamente vamos a explicar cómo solucionar uno de estos bugs que hemos detectado en la versión 1.6.

El error en cuestión sucede al importar productos a través de un fichero CSV. Concretamente el problema está en asignar la categoría principal del artículo. Nosotros en el fichero de importación podemos especificar a qué categorías pertenece cada producto, pero no podemos especificar cuál será la principal.

La categoría principal sirve básicamente para diferenciar productos entre diferentes tiendas (cuando tenemos la opción de multi-tienda activada) y para definir en qué páginas se listan los productos. Si no usamos la opción de multi-tienda, lo más cómodo suele ser definir como categoría principal la categoría más profunda a la que pertenezca el artículo.

Por ejemplo, si tenemos un producto llamado “Portátil Endeos” y pertenece a la categoría “Electrónica” y a la subcategoría “Portátiles”, la categoría principal que pondríamos sería “Portátiles”, que en este caso es la más profunda.

Pues bien, al importar productos en Prestashop 1.6 se va a definir como categoría principal la categoría superior, que suele ser “Inicio” o “Home”. Si importamos 1.000 productos y queremos que la categoría principal sea la de más profundidad definida en el CSV, deberemos modificar el código del siguiente fichero:

controllers/admin/AdminImportController.php

Es importante que los cambios no los hagamos sobre este mismo archivo. Lo ideal es hacer un override de su contenido, de modo que los cambios que hagamos no se pierdan con alguna futura actualización. Por o tanto, el archivo AdminImportController.php lo copiaremos e la siguiente ruta:

override/controllers/admin/

A continuación lo abriremos con nuestro editor de texto preferido. El problema a corregir lo tenemos en las líneas 294 y 1.470 (puede que varíe un poco dependiendo de la instalación, posibles modificaciones previas, etc.).

La primera parte a corregir es en la línea 294 donde pone:

‘id_category_default’ => (int)Configuration::get(‘PS_HOME_CATEGORY’)

Deberemos comentar o eliminar esta línea. Nosotros aconsejamos simplemente comentarla. Lo que hace este trocito de código es definir un valor para la categoría principal. Una vez comentado, ya no se definirá un valor por defecto.

El siguiente paso es localizar en la línea 1.470 el siguiente código:

if (!isset($product->id_category_default) || !$product->id_category_default)
 $product->id_category_default = isset($product->id_category[0]) ? (int)$product->id_category[0] : (int)Configuration::get(‘PS_HOME_CATEGORY’);

Esta sentencia condicional evalúa si hay una categoría por defecto declarada (que va a ser que no porque hemos comentado anteriormente la línea 294) o si el producto no tiene ninguna categoría por defecto asignada.

Esta estructura va a devolver siempre un false, por lo que como categoría principal se pondrá “Inicio” o “Home” tal y como hemos dicho antes. Lo que haremos es comentar todo este código para inutilizarlo. Finalmente, pondremos la siguiente línea justo debajo de la parte que acabamos de comentar:

$product->id_category_default = end($product->id_category);

Con esto le estamos diciendo a Prestashop que la categoría principal sea siempre la última que haya declarada en el CSV. Deberemos ser cuidadosos al confeccionar el documento CSV y asegurarnos de que ponemos las categorías con un orden lógico, teniendo en cuenta que la principal siempre será la última que especifiquemos, por ejemplo:

Si en la columna de categorías del CSV ponemos “Electrónica, Endeos, Portátil” significa que el producto debe pertenecer a estas tres categorías, y cómo principal se va a poner la última especificada, es decir “Portátil”.

Si quieres desarrollar tu tienda online pero todavía no te aclaras con Prestashop, puedes acogerte a uno de nuestros planes de tienda online, nosotros te desarrollamos y gestionamos tu tienda, sin una gran inversión inicial y sin que tengas que preocuparte de nada.

Comparte en redes sociales

Al usar este sitio acepta el uso de cookies para análisis y contenido personalizado. Leer más

ACEPTAR
Aviso de cookies