Jump to content

Desaparecen los atributos de color en las vistas rejilla y lista al activar smarty


obedao

Recommended Posts

Hola, tengo un problema con los atributos de productos en las vistas lista y rejilla.

 

Los productos que tienen combinaciones con el atributo color, en estas vistas, les aparece debajo de la descripción corta los cuadraditos con la representación de colores disponibles que tiene dicho producto.

 

Funciona perfectamente hasta que activo la caché smarty. En este punto, llega un momento que dejan de aparecer a determinados productos, hasta que al final no sale en ninguno.

Si vacío la caché, vuelven a salir unas cuantas veces hasta que vuelven a aparecer.

 

Curioseando con el firebug:

 

donde estaba la lista de colores que ponía esto:

 

<div class="color-list-container">

<ul class="color_to_pick_list clearfix"> ... </ul>

</div>

 

al activar el smarty caché sale bien hasta que de momento empieza a salir así:

 

<div class="color-list-container">

</div>

 

Veo que efectivamente en el html que llega al navegador, desaparece toda el código que general el archivo product-list-colors.tpl de la plantilla.

 

El fallo sólo lo hace en estas vistas, luego entro a la página de producto y las combinaciones y atributos funcionan perfectamente.

 

¿le pasa a alguien más? ¿sabéis cómo se puede solucionar para poder seguir con la caché activada?

 

Mi versión de prestashop es la 1.6.1.0, aunque actualizando a la 1.6.1.1 sigue con el mismo problema.

Mi web es http://laguerza.es

 

Gracias y saludos.

 

 
Link to comment
Share on other sites

Hola, muchas gracias por compartir tu solución.

 

La verdad es que me da bastante reparo activar la caché en mysql.

Según he leído, la base de datos crece de forma enorme, pudiendo pasar de 3 megas a 1 giga en un pis-pas.

Yo uso bastante phpmyadmin para hacer backups y cambios directamente en la base de datos.

Para importar en phpmyadmin una base de datos de 5 megas el servidor necesita su tiempo.

No quiero imaginar lo que sería importar una base de datos de 500 megas, fijo que el servidor daría error timeout.

 

Comenta si puedes si has visto incrementar tu base de datos, yo por mi parte estoy buscando la forma de incluir el tpl 'produc-list-color' en el 'product-list' a ver si así le obligo a que lo procese. No es muy ortodoxo, pero igual funciona...

 

saludos 

Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...

Yo he tenido el mismo problema, es una locura la verdad porque te vuelves loco vaciando y cargando cache...etc. Yo he realizado algunas modificaciones para solucionarlo y parece que lo está, pero si alguien más lo puede probar o comentar las conclusiones a las que he llegado pues se lo agradeceríamos toda la comunidad, por si me equivoco en algo...etc.

 

En primer lugar cuando una persona quiere mostrar los colores en el product list lo que hace es descomentar o dejar el siguiente código:

{if isset($product.color_list)}
  <div class="color-list-container">{$product.color_list}</div>
{/if}

Esto hace uso del método addColorsToProductList definido en la clase FrontController.php (/classes/controller). Además, la llamada se realiza en el fichero CategoryController.php, sobre la línea 233. Esto quiere decir, que muestres o no los cuadraditos de colores en tu product list, estás realizando la llamada de todas maneras.

 

Todo lo que se realiza en este método, por tema de cache...etc se escapa un poco a mi comprensión, y tampoco querría tocarlo, por lo que he optado por realizar una nueva llamada en el controlador que me devolviera los colores y texturas. De esta manera no empleo un fichero tpl, no hago uso de cache...etc. 

 

Por tanto, en primer lugar añado en el FrontController.php el siguiente método:

public function addColorsVal(&$products)
    {
		$string_id='';
		 foreach ($products as &$product) {
			if($string_id=='')
				$string_id=$product['id_product'];
			else
				$string_id=$string_id.','.$product['id_product'];
		 }
		 
		 $sql='SELECT p.id_product, att.color,att.id_attribute, palang.name
				FROM ps_product p, ps_product_attribute pa, ps_product_attribute_combination pac, ps_attribute att, ps_attribute_lang palang, ps_attribute_group pag
				WHERE p.id_product = pa.id_product
				AND pac.id_product_attribute = pa.id_product_attribute
				AND pac.id_attribute = att.id_attribute AND palang.id_attribute=att.id_attribute AND palang.id_lang='.$this->context->language->id.'
				AND pag.id_attribute_group=att.id_attribute_group				
				AND pag.group_type="color"
				AND p.id_product IN ( '.$string_id.' ) 
				GROUP BY p.id_product, att.color,att.id_attribute,palang.name';
		 
		
		$results = Db::getInstance()->ExecuteS($sql,true,0);
		
		 return $results;
	}

Con este método obtengo un array con los productos y sus atributos color. La idea es luego hacer uso de este en el product-list.tpl de tu tema. La sql la he realizado yo, por tanto, si veis algún error o alguna cosa importante a mencionar no dudéis en hacerlo.

 

Además de hacer uso de esta variable en nuestro product-list, hay que ver donde nos interesa realizar el cambio a la llamada addColorsToProductList, ya que además de estar en el fichero de categorías (CategoryController.php), también se realiza cuando navegamos por la paginación o realizamos una búsqueda. Yo en mi caso necesitaba cambiarlo en la página de categorías, en las búsquedas y al filtrar por la navegación por facetas, por lo que tuve que modificar tres ficheros (CategoryController.php, SearchController.php y blocklayered.php, situado en la carpeta modules/blocklayered):

//En el fichero CategoryController cambio:

$this->addColorsToProductList($this->cat_products);

por

$this->context->smarty->assign('colorVal', $this->addColorsVal($this->cat_products));

//En el blocklayered.php:

$this->context->controller->addColorsToProductList($products);

por 

$smarty->assign('colorVal',$this->context->controller->addColorsVal($products));

//En el fichero SearchController cambiamos:

$this->addColorsToProductList($search['result']);

por

$this->context->smarty->assign('colorVal', $this->addColorsVal($search['result']));

y esto

$this->addColorsToProductList($result);

por

$this->context->smarty->assign('colorVal', $this->addColorsVal($result));

(son 3 lineas en total)

Si realizas una búsqueda de addColorsToProductList en tu proyecto de prestashop verás que además habría que cambiar:

 

- BestSalesController.php

- ManufacturerController.php

- NewProductsController.php

- PricesDropController.php

- SupplierController.php

 

El fichero product-list.tpl lo modificamos de la siguiente manera, después del bloque <div class="color-list-container">{$product.color_list}</div> que comentaremos :

{foreach from=$colorVal key=k item=comb}
		{if $comb["id_product"] == $product.id_product}							
				<p class="comb_title">{$comb.name}
				{if $comb.color==''}
					{*assign var='img_color_exists' value=file_exists('/img/co/'|cat:$comb.id_attribute|cat:'.jpg')*}
					{*if $img_color_exists*}
						<img class="colorList" src="{$img_col_dir}{$comb.id_attribute|intval}.jpg" alt="{$comb.name|escape:'html':'UTF-8'}" title="{$comb.name|escape:'html':'UTF-8'}" width="20" height="20" />
					
					{*/if*}
				{else}
					<span class="colorList" style="background:{$comb.color}!important;"></span>
				{/if}
				</p>				
		{/if}
		{/foreach}

En este código He comentado el bloque que smarty comprueba si existe la imagen porque a veces fallaba y no me la mostraba aunque existiera (qué raro, no?). 

Para el span y la imagen de la textura he usado la clase colorList con el siguiente css: 

span.colorList, img.colorList{width:20px;height:20px;display: inline-block;border-radius:50%;vertical-align: bottom;}

Yo uso las imágenes redondeadas, el que no quiera lo puedo omitir del css.

 

Como siempre hacer un backup de todos los ficheros aunque los cambios no son muy traumáticos, espero que os sirva y si alguien lo prueba que comente.

 

Un saludo.

Edited by val_carter (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 4 months later...

De antemano dar las gracias a val_carter por la aportación!

 

Viendo que no se acaba de solucionar a nivel "oficial", alguien ha probado esta solución?

Me parece muy elogiable el trabajo, pero no me gusta mucho modificar estos archivos pues en cualquier actualización te los pueden volver a cambiar y a veces se vuelve un poco locura...

 

Saludos.

Link to comment
Share on other sites

En mi caso es un tema de pago: Diseñado por Chetan Maisuria

 

He probado más alternativas que hay en distintos hilos pero sin éxito! es un poco desesperante...

 

Gracias por el interés!

Link to comment
Share on other sites

Os paso la solución provisional que han propuesto en el hilo en inglés (https://www.prestashop.com/forums/topic/458999-product-color-picker-does-not-show-at-category-list/page-3) que es ir a Preferencias / Producto > marcar la opción "Mostrar productos no disponibles en la página de producto?" a SI

 

Con esto ya muestra los colores, lo malo es que también muestra los productos que tengan desmarcado el check "Disponible para pedidos" en la ficha del producto...

 

Espero que os sirva hasta encontrar la solución definitiva.

 

post-219986-0-47544500-1462371711_thumb.png

Edited by JoseR (see edit history)
Link to comment
Share on other sites

Code-Plus: aunque es una operación que lleva su tiempo... lo he hecho, he instalado una versión 1.6.1.5 limpia en local con los artículos de demo y sí que aparecen los colores en el listado y la ficha.

Lo que he notado es que NO salen en el módulo de Nuevos, Populares, más vendidos y Promociones especiales, pero tanto en el tema de pago que utilizamos como el que viene en la instalación, por lo que eso ya es cosa de la plantilla.

 

Otro detalle es que el entorno de caché no es exactamente el mismo y de hecho no puedo activar las mismas opciones... es complicado hacer un "espejo" del entorno del servidor.

 

Gracias en cualquier caso.

Jose.

Link to comment
Share on other sites

Buenas, si la plantilla no está bien escrita, la caché puede provocar lo de las combinaciones. En la tienda que está en producción, desactiva la cache, y desactiva toda la zona de rendimiento de CCC y etc. Recompila todo.

Comprueba si sale o no lo de los colores. Saludos

Link to comment
Share on other sites

  • 4 weeks later...

Muy buenas, he activado la opción cache en la sección de rendimiento y parece ser que que los colores han salido, cuando lo he vuelto a desactivar a su opción por defecto siguen apareciendo pero no aparecen en la pagina inicial de la tienda, solo aparecen en cada categoría. Alguna sugerencia?

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 year later...
  • 1 month later...

Hola gente, pues yo con mi prestashop 1.7.2 tengo el mismo problema con colores y con listas desplegables.

Si pongo más de dos lista desplegables la que está en primer lugar se ve bien, pero las siguientes desaparecen, os dejo una captura.
 

error-categoria.JPG

Link to comment
Share on other sites

  • 2 years later...

Queridos emprendedores...feliz año 2021!!!  Ya han pasado muchos años...y aún no se resuelve esto.????

Estoy actualizando mi página web en PS1.6 (lo intenté en terthy bees y tuve muchos problemas)

Nuevamente me encuentro con el error que desaparecen los colores al seleccionar varios productos de distintas categorías...al regresar al INDEX ya NO hay colores en los productos, y nuevamente BORRAR CACHE....

Voy a probar la llamada en SQL que hace nuestro amigo mas arriba....pero me di cuenta por otro comentario que si vuelvo a "guardar atributo color con URL amigable" en atributos ( sin modificarlo...solo abrirlo y volver a guardar...APARECE EL COLOR NUEVAMENTE...yo no entiendo pero al parecer hay problemas con la lectura de la URL amigable entonces????

Espero que alguien vea este mensaje, cruzo los dedos!!!

Link to comment
Share on other sites

Lamentablemente no me sirvió ninguna de las opciones. Al elegir varios productos, mas de 6 con el botón seguir comprando...en algún momento se vuelven a perder los colores. Pero insisto....volvía GUARDAR atributo color y aparecieron los colores. 

y luego probé con desactivar y activar URL amigable y APARENCEN colores nuevamente...

Edited by Francisco Ampuero
CAMBIO DE PALABRA y nota importante (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...