JesseNaylor Posted December 20, 2012 Share Posted December 20, 2012 Buenas, He estado teniendo algunos problemas con las imágenes de una tienda que estoy preparando en PrestaShop, y en vez de postear algún problema en concreto, me gustaría entender cómo funcionan los dos sistemas de almacenamiento de imágenes que tiene PrestaShop, puesto que así creo que sabré mejor cuáles son las cuasas que podría tener cada tipo de problema con el que me puedo ir encontrando. Haré un pequeño inciso: esta tienda tiene un catálogo de más de 5.000 productos, así que supongo que os podéis imaginar ya que me he encontrado muchas veces con el siguiente mensaje si intento regenerar las miniaturas tal cual: Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. Apache Server at www.mitiendaonline.es Port 80 Tranquilos, ya sé que lo primero que debo probar cuando me pasa eso es desmarcar la casilla "Borrar las imágenes anteriores", pero eso también da un mensaje de error debido al grandísimo número de imágenes. También he editado el php.ini para asegurarme de tener un timeout de 300 segundos en vez de 60, y un límite de memoria de 512Mb en vez de 64Mb (wow, incluso con eso, es insuficiente). Aquí viene la primera pregunta: cuando desmarco la casilla "Borrar las imágenes anteriores", ¿dónde se gusrdan las imágenes nuevas, y dónde estaban las anteriores? ¿Qué hace exactamente PrestaShop en este caso? Quiero entenderlo mejor (y, quizás, liberar espacio en el servidor en caso de que haya imágenes ahí que no necesito. Ok, así que obviamente mi mejor opción es pasar al denominado "nuevo sistema de almacenamiento de imágenes de los productos" que hay abajo del todo, bajo "Mover las imágenes". Ok, así que le doy a este botón, y luego desactivo la compatibilidad con el sistema de imágenes antiguo. ¿Esto qué hace, exactamente? ¿Me vuelve a generar las imágenes en otro directorio, guarda las anteriores, etc? Me gustaría entenderlo mejor. Cuando tengo activado esto, ¿puedo volver a regenerar las miniaturas en caso de que me haga falta? ¿Cómo se haría? Entiendo que no se haría de la misma manera al no estar usando el sistema antiguo de imágenes. Y ahora otra pregunta referida a tamaños de imagen personalizados. Digamos que he creado un tamaño de imagen personalizado llamado "category_thumb", y lo tengo asignado a categorías y productos. Entiendo que necesito regenerar las miniaturas para que aparezca este nuevo tamaño de imagen, ¿no? ¿O aparecen automáticamente las imágenes a este nuevo tamaño al haberlo creado ya? Y si yo quiero asignar este tamaño de imagen a las miniaturas de las subcategorías, por ejemplo, entiendo que necesitaría editar "category.tpl" y cambiar este código: {foreach from=$subcategories item=subcategory} <li> <a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$subcategory.name|escape:'htmlall':'UTF-8'}"> {if $subcategory.id_image} <img src="{$link->getCatImageLink($subcategory.link_rewrite, $subcategory.id_image, 'medium')}" alt="" width="{$mediumSize.width}" height="{$mediumSize.height}" /> {else} <img src="{$img_cat_dir}default-medium.jpg" alt="" width="{$mediumSize.width}" height="{$mediumSize.height}" /> {/if} </a><br /> <a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$subcategory.name|escape:'htmlall':'UTF-8'}</a> </li> {/foreach} por este otro, que se supone que serviría para mostrar el nuevo tamaño de imagen que hemos creado: <li> <a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$subcategory.name|escape:'htmlall':'UTF-8'}"> {if $subcategory.id_image} <img src="{$link->getCatImageLink($subcategory.link_rewrite, $subcategory.id_image, 'category_thumb')}" alt="" width="{$category_thumbSize.width}" height="{$category_thumbSize.height}" /> {else} <img src="{$img_cat_dir}default-category_thumb.jpg" alt="" width="{$category_thumbSize.width}" height="{$category_thumbSize.height}" /> {/if} </a><br /> <a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$subcategory.name|escape:'htmlall':'UTF-8'}</a> </li> y, sin embargo, esto no funciona. ¿Qué controla parámetros como $category_thumbSize.height? ¿Dónde se edita? ¿Hay que editarlo o lo reconoce automáticamente? Naturalmente, al editar un archivo .tpl siempre le damos a "Forzar la compilación" en Preferencias > Rendimiento antes de poder visualizar los cambios. Por cierto, tened cuidado con eso, porque si estáis testeando mucho la página con eso activado, vuestro Hosting os puede bloquear el acceso a la web por uso excesivo de procesador del servidor, así que no abuséis. Otro problema que tengo es que, desde que regeneré por primera vez las miniaturas, me dejaron de funciona las imágenes ampliadas (las llamadas "thickbox"). Esto devuelve el siguiente mensaje: <p id="fancybox-error"> The requested content cannot be loaded. <br/> Please try again later. </p> Lo he probado en Opera, Chrome, Internet Explorer y Firefox y en todos sale ese mismo mensaje. Y ahora no consigo que se muestre ninguna imagen ampliada. ¿Alguien sabe cómo solucionar eso? ¿Qué hay que hacer para que vuelvan a funcionar las imágenes de tipo "thickbox"? Por favor, si hay alguien que ser un verdadero crack de PrestaShop y quiera compartir con los demás sus conocimientos en el mencionado campo de la gestión de imágenes que hace PrestaShop, su ayuda será increíblemente bienvenida. He estado navegando mucho por el foro y en Google y me he dado cuenta de que hay muchísima, muchísima gente que tiene problemas con las imágenes, y creo que muchos de estos problemas los podremos solventar si entendemos mejor el funcionamiento del sistema de imágenes de PrestaShop. Mil gracias de antemano y espero que este análisis pueda contribuir de verdad a mejorar nuestra experiencia trabajando con PrestaShop. Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 20, 2012 Share Posted December 20, 2012 (edited) ¿dónde se gusrdan las imágenes nuevas, y dónde estaban las anteriores? Para los productos /img/p/ Para las categorías /img/c/ Fijate en el fichero: /controllers/admin/AdminImportController.php Edited December 20, 2012 by Rubalcaba (see edit history) Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 20, 2012 Share Posted December 20, 2012 (edited) Y ahora otra pregunta referida a tamaños de imagen personalizados. Digamos que he creado un tamaño de imagen personalizado llamado "category_thumb", y lo tengo asignado a categorías y productos. Entiendo que necesito regenerar las miniaturas para que aparezca este nuevo tamaño de imagen, ¿no? ¿O aparecen automáticamente las imágenes a este nuevo tamaño al haberlo creado ya? Y si yo quiero asignar este tamaño de imagen a las miniaturas de las subcategorías, por ejemplo, entiendo que necesitaría editar "category.tpl" y cambiar este código: {foreach from=$subcategories item=subcategory} <li> <a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$subcategory.name|escape:'htmlall':'UTF-8'}"> {if $subcategory.id_image} <img src="{$link->getCatImageLink($subcategory.link_rewrite, $subcategory.id_image, 'medium')}" alt="" width="{$mediumSize.width}" height="{$mediumSize.height}" /> {else} <img src="{$img_cat_dir}default-medium.jpg" alt="" width="{$mediumSize.width}" height="{$mediumSize.height}" /> {/if} </a><br /> <a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$subcategory.name|escape:'htmlall':'UTF-8'}</a> </li> {/foreach} por este otro, que se supone que serviría para mostrar el nuevo tamaño de imagen que hemos creado: <li> <a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$subcategory.name|escape:'htmlall':'UTF-8'}"> {if $subcategory.id_image} <img src="{$link->getCatImageLink($subcategory.link_rewrite, $subcategory.id_image, 'category_thumb')}" alt="" width="{$category_thumbSize.width}" height="{$category_thumbSize.height}" /> {else} <img src="{$img_cat_dir}default-category_thumb.jpg" alt="" width="{$category_thumbSize.width}" height="{$category_thumbSize.height}" /> {/if} </a><br /> <a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$subcategory.name|escape:'htmlall':'UTF-8'}</a> </li> y, sin embargo, esto no funciona. ¿Qué controla parámetros como $category_thumbSize.height? ¿Dónde se edita? ¿Hay que editarlo o lo reconoce automáticamente? Antiguamente los reconocia.... Aunque por ejemplo si vamos al fichero: controllers/front/CategoryController.php Dentro del fichero, podemos encontrar esto: $this->context->smarty->assign(array( 'category' => $this->category, 'products' => (isset($this->cat_products) && $this->cat_products) ? $this->cat_products : null, 'id_category' => (int)$this->category->id, 'id_category_parent' => (int)$this->category->id_parent, 'return_category_name' => Tools::safeOutput($this->category->name), 'path' => Tools::getPath($this->category->id), 'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'categorySize' => Image::getSize('category_default'), 'mediumSize' => Image::getSize('medium_default'), 'thumbSceneSize' => Image::getSize('m_scene_default'), 'homeSize' => Image::getSize('home_default'), 'allow_oosp' => (int)Configuration::get('PS_ORDER_OUT_OF_STOCK'), 'comparator_max_item' => (int)Configuration::get('PS_COMPARATOR_MAX_ITEM'), 'suppliers' => Supplier::getSuppliers() )); Por ejemplo, modifica esto: 'mediumSize' => Image::getSize('medium_default'), Por esto: 'category_thumbSize' => Image::getSize('category_thumb'), Edited December 20, 2012 by Rubalcaba (see edit history) Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 20, 2012 Share Posted December 20, 2012 Buenas, He estado teniendo algunos problemas con las imágenes de una tienda que estoy preparando en PrestaShop, y en vez de postear algún problema en concreto, me gustaría entender cómo funcionan los dos sistemas de almacenamiento de imágenes que tiene PrestaShop, puesto que así creo que sabré mejor cuáles son las cuasas que podría tener cada tipo de problema con el que me puedo ir encontrando. Haré un pequeño inciso: esta tienda tiene un catálogo de más de 5.000 productos, así que supongo que os podéis imaginar ya que me he encontrado muchas veces con el siguiente mensaje si intento regenerar las miniaturas tal cual: Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. Apache Server at www.mitiendaonline.es Port 80 Tranquilos, ya sé que lo primero que debo probar cuando me pasa eso es desmarcar la casilla "Borrar las imágenes anteriores", pero eso también da un mensaje de error debido al grandísimo número de imágenes. También he editado el php.ini para asegurarme de tener un timeout de 300 segundos en vez de 60, y un límite de memoria de 512Mb en vez de 64Mb (wow, incluso con eso, es insuficiente). Yo con el max_execution_time a 120 y el memory_limit a 128MB he podido regeneras mas de 5000 imagenes sin ningun problema. Un Saludo, 1 Link to comment Share on other sites More sharing options...
JesseNaylor Posted December 20, 2012 Author Share Posted December 20, 2012 (edited) Yo con el max_execution_time a 120 y el memory_limit a 128MB he podido regeneras mas de 5000 imagenes sin ningun problema. Un Saludo, Por cierto, siento haber contestado en distintos post, pero cuando leo una parrafada, soy muy perezoso para poder leerla de golpe, supongo que le pasara lo mismo a otros usuarios ) Yo tengo max_execution_time en 300 y memory_limit en 512 y no me regenera/muestra las imágenes thickbox. Aquí va un ejemplo (discreción, por favor): http://www.lacamasin...leg-black-.html Gracias por los aportes, Rubalcaba Edited December 20, 2012 by JesseNaylor (see edit history) Link to comment Share on other sites More sharing options...
JesseNaylor Posted December 20, 2012 Author Share Posted December 20, 2012 ¿Fancybox deja de funcionar cuando se usan URLs amigables? Me está dando la impresión de que mis imágenes de thickbox están donde deberían de estar, pero que no se están mostrando al llamarlos desde el link. Link to comment Share on other sites More sharing options...
JesseNaylor Posted December 20, 2012 Author Share Posted December 20, 2012 Para los productos /img/p/ Para las categorías /img/c/ Fijate en el fichero: /controllers/admin/AdminImportController.php Tengo los directorios img/p e img/c, pero en controllers no tengo ningún directorio, y no consigo localizar AdminImportController.php. Link to comment Share on other sites More sharing options...
CarlosAdrian Posted December 20, 2012 Share Posted December 20, 2012 Sobre el sistema nuevo de almacenamiento de imágenes, lo que hace es guardarlas en diferentes directorios para mejorar el rendimiento (y vaya si lo mejora). Por ejemplo, antes la imagen 12345 antes la guardaba en img/p/12345.jpg, y ahora la guarda en img/p/1/2/3/4/5/12345.jpg. Al haber menos ficheros que listar en cada directorio, todo va mucho más rápido. Por contra, hay que currarse un poco más las rutas. Sobre la importación, el memory_limit, etc... yo me he rendido. Te doy dos soluciones, que no te van a gustar, pero que al final es lo que yo estoy haciendo: 1) Comprarte el Store Manager e importar desde ahí 2) Hacer todas las importaciones en local y luego subir las tablas Espero haberte sido de ayuda 1 Link to comment Share on other sites More sharing options...
JesseNaylor Posted December 20, 2012 Author Share Posted December 20, 2012 Sobre el sistema nuevo de almacenamiento de imágenes, lo que hace es guardarlas en diferentes directorios para mejorar el rendimiento (y vaya si lo mejora). Por ejemplo, antes la imagen 12345 antes la guardaba en img/p/12345.jpg, y ahora la guarda en img/p/1/2/3/4/5/12345.jpg. Al haber menos ficheros que listar en cada directorio, todo va mucho más rápido. Por contra, hay que currarse un poco más las rutas. Muchas gracias, CarlosAdrian, con eso ya entiendo el porqué de tantos directorios y cómo archiva las imágenes. Y sobre el Store Manager... no es una opción que me valga, porque aunque importamos todo el catálogo de productos, mi cliente fue buscando y subiendo las imágenes que quería poner en cada producto una por una, y no le puedo pedir que vuelva a subir ninguna. Volviendo al nuevo sistema de almacenamiento de imágenes: si quiero volver a generar miniaturas cuando estoy usando ese sistema, ¿tengo que cambiarlo todo de nuevo al sistema antiguo antes de regenerar, o me reconoce que estoy en el sistema nuevo y me las regenera bien así? Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 20, 2012 Share Posted December 20, 2012 Tengo los directorios img/p e img/c, pero en controllers no tengo ningún directorio, y no consigo localizar AdminImportController.php. Si usas una versión anterior a la 1.5, el fichero que menciono es el fichero: /directorio_administracion/tabs/AdminImport.php Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 20, 2012 Share Posted December 20, 2012 Muchas gracias, CarlosAdrian, con eso ya entiendo el porqué de tantos directorios y cómo archiva las imágenes. Y sobre el Store Manager... no es una opción que me valga, porque aunque importamos todo el catálogo de productos, mi cliente fue buscando y subiendo las imágenes que quería poner en cada producto una por una, y no le puedo pedir que vuelva a subir ninguna. Volviendo al nuevo sistema de almacenamiento de imágenes: si quiero volver a generar miniaturas cuando estoy usando ese sistema, ¿tengo que cambiarlo todo de nuevo al sistema antiguo antes de regenerar, o me reconoce que estoy en el sistema nuevo y me las regenera bien así? Te da una opción Prestashop, al menos que yo recuerde en la pestaña Preferencias -> Imagenes, abajo del todo donde dice: Mover las imágenes Un nuevo sistema de almacenamiento de imágenes de los productos ahora es utilizado por PrestaShop. Ofrece un mejor rendimiento si su tienda tiene un número muy grande de productos. Tienes un boton, para mover las imagenes. (En caso de que ya las tengas generadas) Link to comment Share on other sites More sharing options...
JesseNaylor Posted December 20, 2012 Author Share Posted December 20, 2012 Aquí va un ejemplo (discreción, por favor): http://www.lacamasin...leg-black-.html ¿Alguien me sabría decir por qué no se muestran las imágenes de thickbox? ¿Es porque no se me han regenerado o hay algún otro tipo de fallo? ¿Qué podría hacer para averiguarlo? Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 20, 2012 Share Posted December 20, 2012 (edited) ¿Fancybox deja de funcionar cuando se usan URLs amigables? Me está dando la impresión de que mis imágenes de thickbox están donde deberían de estar, pero que no se están mostrando al llamarlos desde el link. Fancybox, funciona normalmente tanto con como sin urls amigable. Edited December 20, 2012 by Rubalcaba (see edit history) Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 20, 2012 Share Posted December 20, 2012 Por cierto en tu caso ya veo que te funcionan. Saludos, Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 20, 2012 Share Posted December 20, 2012 Yo tuve un caso parecido una vez, tuve que regenerar las miniaturas: thickbox_default Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 20, 2012 Share Posted December 20, 2012 (edited) Aunque ahora que lo recuerdo no se si lo arrelge en su momento regenerando las miniaturas o tocando algun parametro en el product.tpl Aunque en tu caso ya veo que ahora si se te ve. De todos modos muchas veces teniendo el mismo error, el problema es distinto. Edited December 20, 2012 by Rubalcaba (see edit history) Link to comment Share on other sites More sharing options...
JesseNaylor Posted December 20, 2012 Author Share Posted December 20, 2012 Por cierto en tu caso ya veo que te funcionan. Saludos, Sí, acabo de conseguir resolverlo. Ok, pues por increíble que parezca, cuando el servidor se queda sin memoria, simplemente basta con pulsar "atrás" en tu navegador (back, return, página anterior, lo que sea jeje), volver a seleccionar (en mi caso) Products > Thickbox, NO borrar imágenes anteriores, y el servidor sigue regenerando imágenes por donde se quedó. Yo hubiese esperado que empezase otra vez desde cero y se quedase sin memoria en el mismo sitio (que, por cierto, se quedaba sin memoria justo en la imagen número 6530, y me ha costado mucho tiempo averiguar eso), y sin embargo, empieza de nuevo con las que no estaban generadas. Claro, de esta manera, por muchas imágenes que tengas, tarde o temprano, si le das suficientes pasadas e ignoras suficientes veces el mensaje de que el servidor se ha quedado sin memoria, AL FINAL, se te acaban regenerando todas las imágenes. Link to comment Share on other sites More sharing options...
Recommended Posts