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:

Prestashop_AnadirFormatoMoneda
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:

Prestashop_AnadirFormatoMoneda-2

Prestashop_AnadirFormatoMoneda-3

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies