Vamos a ver cómo añadir un nuevo formato de moneda en Prestashop. En la configuración de la moneda en Prestashop disponemos de diferentes formatos posibles para representar los precios de los artículos. El problema que tiene Prestashop (pongo como ejemplo v1.5.2.0), es que no tiene el formato que habitualmente usamos en España, que es un formato de este tipo 0.000,00 X.
Formatos disponibles en Prestashop 1.5.2.0:
Para añadir nuestro formato habitual, no vale con añadir el nuevo formato en BBDD, que sería lo normal a mi parecer, sino que tenemos que modificar varios ficheros PHP del core del Prestashop. La pega que tiene esto, es que si actualizamos a una versión más actual de Prestashop puede que perdamos dicha configuración y haya que repetir el proceso.
Hay que modificar 3 ficheros:
- classesTools.php (línea 485 aprox.)
- classesCurrency.php (línea 189 aprox.)
- jstools.js (línea 60 aprox.)
- controllersadminAdminCurrenciesController.php (línea 146 aprox.)
Las modificaciones a realizar en cada uno son:
En el fichero classesTools.php (línea 485 aprox.) vamos a añadir un nuevo formato y lo vamos a codificar como el número 6. Hay que mantener siempre en los tres fichero este número:
$price = Tools::ps_round($price, $c_decimals);
switch ($c_format)
{
/* X 0,000.00 */
case 1:
$ret = $c_char.$blank.number_format($price, $c_decimals, '.', ',');
break;
/* 0 000,00 X*/
case 2:
$ret = number_format($price, $c_decimals, ',', ' ').$blank.$c_char;
break;
/* X 0.000,00 */
case 3:
$ret = $c_char.$blank.number_format($price, $c_decimals, ',', '.');
break;
/* 0,000.00 X */
case 4:
$ret = number_format($price, $c_decimals, '.', ',').$blank.$c_char;
break;
/* 0 000.00 X Added for the switzerland currency */
case 5:
$ret = number_format($price, $c_decimals, '.', ' ').$blank.$c_char;
break;
/* 0.000,00 X */
case 6:
$ret = number_format($price, $c_decimals, ',', '.').$blank.$c_char;
break;
}
En el fichero classesCurrency.php (línea 189 aprox.) añadimos al array el ID 6, que es idéntica al ID 2. Hay que tener cuidado y no olvidarse de incluir la coma final en el ID 5:
</pre>
$formats = array(
1 => array('left' => &$formated_strings['left'], 'right' => ''),
2 => array('left' => '', 'right' => &$formated_strings['right']),
3 => array('left' => &$formated_strings['left'], 'right' => ''),
4 => array('left' => '', 'right' => &$formated_strings['right']),
5 => array('left' => '', 'right' => &$formated_strings['right']),
6 => array('left' => '', 'right' => &$formated_strings['right'])
);
<pre>
En el fichero jstools.js (línea 60 aprox.) modificamos la siguiente función añadiendo nuestra entrada codificada con el número 6:
function formatCurrency(price, currencyFormat, currencySign, currencyBlank)
{
// if you modified this function, don't forget to modify the PHP function displayPrice (in the Tools.php class)
blank = '';
price = parseFloat(price.toFixed(6));
price = ps_round(price, priceDisplayPrecision);
if (currencyBlank > 0)
blank = ' ';
if (currencyFormat == 1)
return currencySign + blank + formatNumber(price, priceDisplayPrecision, ',', '.');
if (currencyFormat == 2)
return (formatNumber(price, priceDisplayPrecision, ' ', ',') + blank + currencySign);
if (currencyFormat == 3)
return (currencySign + blank + formatNumber(price, priceDisplayPrecision, '.', ','));
if (currencyFormat == 4)
return (formatNumber(price, priceDisplayPrecision, ',', '.') + blank + currencySign);
if (currencyFormat == 5)
return (formatNumber(price, priceDisplayPrecision, ' ', '.') + blank + currencySign);
if (currencyFormat == 6)
return (formatNumber(price, priceDisplayPrecision, '.', ',') + blank + currencySign);
return price;
}
Y por último, en el fichero controllersadminAdminCurrenciesController.php (línea 146 aprox.), volvemos a añadir una entrada más con la codificación del número 6 (no olvidarse de incluir la coma del final de la línea del key=5):
'options' => array(
'query' => array(
array('key' => 1, 'name' => 'X0,000.00 ('.$this->l('as with Dollars').')'),
array('key' => 2, 'name' => '0 000,00X ('.$this->l('as with Euros').')'),
array('key' => 3, 'name' => 'X0.000,00'),
array('key' => 4, 'name' => '0,000.00X'),
array('key' => 5, 'name' => '0 000.00X'), // Added for the switzerland currency
array('key' => 6, 'name' => '0.000,00X')
),
'name' => 'name',
'id' => 'key'
)
Una vez modificado el código y subido al servidor, podemos comprobar que los cambios surgen efecto. Sólo falta irse a la configuración de la moneda y seleccionar el nuevo formato que hemos incluido:





¡Hola! Soy Javier. Soy informático y me gusta documentar todo lo que aprendo. En mi blog te enseño todo lo que sé y cómo puedes aprender a crear tu propia web, mejorar el SEO y aplicar técnicas de Marketing Digital para conseguir mayor visibilidad. Suscríbete para no perderte ninguna de mis guías sobre WordPress, posicionamiento SEO o Marketing Digital.

Hola Jess, has limpiado la caché y esas cosas? Aunque en la versión 6 puede que hayan cambiado algunos ficheros, Si localizaste cada uno de los puntos e hiciste los cambios bien, puede ser que no visualices los cambios por culpa de la caché o algo. Un saludo, Javier.
Hola soy de Chile y los formatos de precios no cuadran del todo, aquí no usamos coma, pero eso no es tan relevante para leer las cifras, mi problema es que tengo productos de $1.000.000 (un millon de pesos) pero al guardar la cifra prestashop la convierte en $1.000 (mil pesos) , ¿como hacer para que se guarden todos los dígitos necesarios?
gracias de antemano
Mira la documentación oficial de Prestashop a ver si ves algo. Ahora mismo no tengo ningún prestashop donde hacer la prueba. Me he pasado a WooCommerce ;). Saludos.
Gracias Javier, ya había revisado la documentación pero no hay pistas sobre este asunto. Por el momento no exhibiré los productos de más de un millón.
saludos!
Gracias , me ha sido muy útil, yo lo he realizado sobre un prestashop 1.6 , por cierto ¿Porque has migrado a woocommerce ?
Me alegro que te haya sido de utilidad. Pues cambié Prestashop por WooCommerce por mantenibilidad y el SEO. Diseñar cualquier página o añadirle contenido nuevo es muy costoso. Y el SEO es más fácil de gestionar en WordPress. Posiciona muchísimo mejor que Prestashop para mi gusto, y las posibilidades que ofrece son brutales. Es cierto que Prestashop está más enfocado a gestionar miles de productos, y que con WooCommerce puede ser algo más tedioso, pero el SEO manda, y que WordPress ya sea un blog de por sí ayuda mucho a que consiga más visitas. Un saludo.