solucionar prestashop muestra mismo precio con y sin descuento

Prestashop muestra el precio con descuento con la misma cantidad que el normal sin haberlo configurado [Solucionado]

Algunas veces cuando estamos montando nuestra tienda y elegimos una plataforma en concreto, podemos encontrarnos con pequeños problemas que se pueden deber a diversos motivos. En este caso el problema es que prestashop 1.6 en algunos productos muestra el precio normal y el tachado con descuento con el mismo importe sin haberlo configurado.Es un problema poco común, y seguramente encontrarás poca información al respecto, ya que lo que suele querer el usuario o administrador medio es añadir ese precio con descuento o incluso cambiarlo de lugar en las plantillas, pero aquí te voy a dejar cómo he solucionado yo este pequeño problema y por qué se genera, aunque no tiene mucha lógica.

El problema aparece, si trasteas en la plantilla, por que el precio con descuento sale redondeado, y el precio normal viene con una larga cadena de valores decimales. Si los mostramos los dos en el artículo que nos da el problema seguramente encontraremos algo así:

  • 2880
  • 2880.00000001

Prestashop compara los dos precios y si uno es menor que el otro entonces es cuando muestra el precio con descuento y tacha el precio normal, pero claro, si por problemas de los cálculos que son demasiado precisos nos encontramos con que esos valores siempre están uno por debajo del otro, entonces es cuando vemos los dos precios sin haberlos configurado.

Lo vemos solo en algunos precios por que el cálculo del IVA hace que en esos precios en concreto haya algunas milésimas de diferencia. En caso de haber solo un par de decimales en los precios esto no pasaría, pero tendríamos el problema de que el precio con IVA y sin IVA no se calcularía correctamente en todos los productos.

Léete también  Por qué no debes apagar tu ordenador a lo bruto

Solucionar el que prestashop muestre el mismo precio con y sin descuento

Lo que he hecho aquí ha sido echar mano de la picaresca, y simplemente modificar la plantilla para crear mis dos variables con el precio con descuento y el precio normal, calcularlos como número con dos decimales, y entonces comparar si está por debajo o no. De esta forma no tendremos problema con el IVA y los descuentos empezarán a funcionar correctamente.

Para ello modificamos un par de plantillas en las que encontraremos el mismo trozo de código:

/themes/mitema/product-list.tpl
/themes/mitema/modules/homefeatured/homefeatured.tpl

Una vez los tengamos abiertos buscaremos la parte del código en la que marca lo siguiente:

{if $product.show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE and $product.price < $product.price_without_reduction}

Como está programado en Smarty, tendremos que hacer uso de este tipo de código fuente, pero no hay problema, ya que lo que hace es ejecutar el código entre llaves.

Modificaremos esa línea y la reemplazaremos con:

{assign var=pricelow value=(number_format($product.price_without_reduction,2))}
{assign var=pricenormal value=(number_format($product.price,2))}
{if $product.show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE and $product.price < $product.price_without_reduction AND $pricelow != $pricenormal}

Con esto simplemente lo que hacemos es crear dos variables, una con el precio reducido y otra con el normal, pero formateadas con un par de decimales. Luego al final de la línea que hemos buscado hemos agregado AND $pricelow != $pricenormal, que lo que hará será comparar si los dos precios son iguales, y si no entonces se mostrará el tachado.

Con estas simples líneas de código que tendremos que introducir en todos los archivos que se muestre el precio tachado (si falta algún archivo que modificar por favor indícalo en un comentario y lo pondré en la lista), debería volver a funcionar correctamente.

Léete también  [Solucionado] PHP Fatal error: Class 'DOMDocument' not found

¿Has tenido este problema? ¿Qué archivos has tenido que modificar tú?


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.