En esta entrada te traemos la solución a como utilizar la función convertPrice en PrestaShop 1.7.

En PrestaShop 1.6, la función «convertPrice()» se utilizaba para formatear precios y mostrarlos correctamente en base a una moneda.

Esta función probablemente la habrás visto bastantes veces y casi seguro que la has utilizado más de una vez, pero actualmente si estas trabajando con versiones de PrestaShop 1.7 ya te habrás dado cuenta de que está «deprecated» e ya no funciona correctamente. En caso contrario, hoy aprenderás una cosa nueva que probablemente te pueda resultar de ayuda :).

Cambió con la función convertPrice() en PrestaShop 1.7

Como te comentaba, la función «convertPrice()» en PrestaShop 1.7 ha pasado a la historia y a pesar de que hasta ahora nos había salvado muchas veces, tenemos que modernizarnos y adaptarnos a los cambios.

Con PrestaShop 1.7 tenemos tres alternativas para poder formatear los precios y números float al formato que cualquier cliente quiere visualizar un precio:

  • Función «convertAndFormatPrice()» localizada dentro de la clase «Product.php«.
  • Función «formatPrice()» localizada en el fichero «Locale.php«.
  • Función «displayPrice()» localizada en el fichero «Tools.php«.

Función convertAndFormatPrice() para convertir los números a precios en PrestaShop 1.7.6

La primera opción para formatear un número decimal y que se vea con el formato de un precio es utilizar la función «convertAndFormatPrice()» de la clase «Product.php«. Se trata de una función estática por lo que podrás utilizarla en cualquier parte de tu código. Esta función solo necesita que le envies dos parámetros:

  • $price –> Corresponde al valor tipo «float» que queremos transformar a un precio.
  • $currency –> Corresponde al objeto «currency«. Si este parámetro no lo tienes, puedes hacer uso de «Context::getContext()->currency«.

El código quedaría del siguiente modo:

Product::convertAndFormatPrice((float)$price, $currency);

Por ejemplo, si «$price = 1.76» y el objeto «$currency» corresponde al «euro», la llamada a esta función te va a devolver como resultado «1,76€«.


Función formatPrice() para convertir los números a precios en PrestaShop 1.7.6

Este seria el segundo modo para formatear un número decimal y obtener su formato en precio. La función tiene el nombre «formatPrice()» y para utilizarla necesitas hacer la llamada a través del context.

Los dos parámetros que le tienes que enviar son:

  • $price –> Corresponde al valor tipo «float» que queremos transformar a un precio.
  • $currency_iso_code –>  Corresponde a la cadena «ISO code» de la moneda a la que queremos transformar el decimal y obtener el formato en precio. Si este parámetro no lo tienes, puedes hacer uso de «Context::getContext()->currency->iso_code«.

El código quedaría del siguiente modo:

Context::getContext()->currentLocale->formatPrice((float)$price, $currency_iso_code);

Por ejemplo, si «$price = 1.76» y el objeto «$currency» corresponde al «euro», la llamada a esta función te va a devolver como resultado «1,76€«.

Función displayPrice() para convertir los números a precios en PrestaShop 1.7.6

El tercer método para formatear un número decimal y que se vea con el formato de un precio es utilizar la función «displayPrice()» de la clase «Tools.php«. Se trata de una función estática por lo que podrás utilizarla en cualquier parte de tu código. Esta función solo necesita que le envíes dos parámetros obligatorios:

  • $price –> Corresponde al valor tipo «float» que queremos transformar a un precio.
  • $currency –> Corresponde al objeto «currency«. Si este parámetro no lo tienes, puedes hacer uso de «Context::getContext()->currency«.

El código quedaría del siguiente modo:

Tools::displayPrice((float)$price, $currency);

Por ejemplo, si «$price = 1.76» y el objeto «$currency» corresponde al «euro», la llamada a esta función te va a devolver como resultado «1,76€«.

Y hasta aquí llega toda la información que necesitas saber sobre como utilizar la función convertPrice en PrestaShop 1.7. Esperamos que la entrada te sirva de ayuda y para cualquier duda o problema no dudes en contactar con nosotros :).