Introduccion
Con el tiempo, al actualizar productos, cambiar temas o modificar configuraciones de imagen en PrestaShop, pueden generarse inconsistencias en las miniaturas y la caché de imágenes. Estas inconsistencias se traducen en imágenes rotas, falta de proporciones correctas o simplemente en una experiencia visual deficiente para el usuario final.
En este artículo veremos cómo forzar la regeneración de miniaturas desde PHP, paso a paso, aprovechando las clases nativas de PrestaShop sin depender de módulos adicionales.
- Estructura de imágenes en PrestaShop
PrestaShop genera varias versiones de una imagen original en distintos tamaños (miniaturas) para adaptarlas a los diferentes bloques del tema: listados, productos, carritos, etc.
Estas miniaturas se definen en:
- Back-office > Diseño > Imagenes > Tipos de imagen
Y se almacenan físicamente en:
/img/p/
Con una estructura fragmentada por ID (ejemplo: /img/p/1/4/5/145.jpg).
Cada imagen tiene varias versiones como:
- 145-home_default.jpg
- 145-cart_default.jpg
- 145-large_default.jpg
- Cuándo necesitas regenerar miniaturas
- Cambiaste los tamaños de imágenes en el tema
- Reinstalaste o modificaste un tema
- Migraste desde otra tienda o subiste imágenes masivamente por FTP
- Las miniaturas se corrompieron o están desactualizadas
En estos casos, regenerarlas desde PHP evita tener que hacerlo manualmente desde el back-office, especialmente en tiendas grandes.
- Regenerar miniaturas con PHP (manual)
Puedes crear un archivo como regenerar_imagenes.php en la raíz de tu instalación de PrestaShop:
<?php
require(dirname(__FILE__).’/config/config.inc.php’);
require(dirname(__FILE__).’/init.php’);
$types = ImageType::getImagesTypes(‘products’);
$products = Product::getProducts(Context::getContext()->language->id, 0, 0, ‘id_product’, ‘ASC’);
foreach ($products as $product) {
$images = Image::getImages(Context::getContext()->language->id, $product[‘id_product’]);
foreach ($images as $img) {
$image = new Image($img[‘id_image’]);
$image_path = $image->getPathForCreation();
foreach ($types as $type) {
ImageManager::resize(
$image_path.’.jpg’,
$image_path.’-‘.$type[‘name’].’.jpg’,
(int)$type[‘width’],
(int)$type[‘height’]
);
}
}
}
echo «Miniaturas regeneradas con éxito.»;
?>
Este script recorre todos los productos, busca sus imágenes, y regenera las miniaturas en todos los formatos definidos.
- Borrar caché de imágenes
Regenerar miniaturas no borra automáticamente la caché del sistema. Puedes hacerlo manualmente o desde PHP:
Tools::clearSmartyCache();
Tools::clearXMLCache();
Media::clearCache();
O eliminar el contenido de /img/tmp/ y /var/cache/ si estás en PrestaShop 1.7+.
- Automatización con CRON o backend
Puedes ejecutar este script:
- Desde consola:
php regenerar_imagenes.php
- Desde navegador: https://tu-tienda.com/regenerar_imagenes.php
- Con un CRON job regular:
0 4 * * 0 php /ruta/tu-tienda/regenerar_imagenes.php
- Consideraciones adicionales
- Si tienes muchos productos, este proceso puede tardar varios minutos.
- Asegúrate de tener suficiente espacio en disco.
- Verifica permisos de escritura en /img/p/
Apéndice: Fragmento de código clave
Regenerar miniaturas para todas las imágenes:
foreach ($types as $type) {
ImageManager::resize(
$image_path.’.jpg’,
$image_path.’-‘.$type[‘name’].’.jpg’,
(int)$type[‘width’],
(int)$type[‘height’]
);
}
Limpiar caché desde PHP:
Tools::clearSmartyCache();
Tools::clearXMLCache();
Media::clearCache();
Conclusión
La regeneración de miniaturas desde PHP es una herramienta imprescindible para mantener la consistencia visual de tu tienda PrestaShop, especialmente en entornos donde se hacen cambios masivos, migraciones o automatizaciones.
Este enfoque es seguro, reproducible y mucho más eficiente que hacerlo desde la interfaz web si estás trabajando con catálogos grandes o necesitas integrarlo en flujos DevOps.