Jump to content
Fanyyy974

[Résolu] Affichage prix dans différentes devises

Recommended Posts

Bonjour,

 

Je souhaiterai afficher le prix sur mes fiches produits dans différentes devises avec notamment d'abord le prix en euros et entre parenthèses le prix convertit en dollar.

 

Voici le code que j'utilise :

{convertPriceWithCurrency price=$product->getPrice(true, $smarty.const.NULL, 2) currency=$currencies.0}

 

Cependant, le résultat obtenu n'est pas le bon car j'obtiens 9,90 € et $9.90. La conversion en dollar n'est pas effectuée car je devrais obtenir $13.42.

 

Merci d'avance pour votre aide

 

Petit up pour préciser que je suis sur la version 1.5 :)

Edited by Fanyyy974 (see edit history)

Share this post


Link to post
Share on other sites

Salut,

 

As-tu essayé :

 

{assign var="price" value=$product->getPrice(true, $smarty.const.NULL, 2)}
{displayPrice price=$price currency=$currencies.0}

Share this post


Link to post
Share on other sites

Merci pour ta réponse.

 

Je viens d'essayer mais cela m'affiche le prix en euros soit 9,90 € :(

Share this post


Link to post
Share on other sites

$currencies.0

 

Ya quoi dans cette variable $currencies ?

En particulier le premier élément, puisque tu cible le 0 ?

Share this post


Link to post
Share on other sites

Dans la variable $currencies, il y a les différentes devises. Et plus précisemment :

$currencies->value = Array (2)
 0 => Array (12)
id_currency => "2"
name => "Dollar"
iso_code => "USD"
iso_code_num => "840"
sign => "$"
blank => "0"
format => "1"
decimals => "1"
conversion_rate => "1.355420"
deleted => "0"
active => "1"
id_shop => "1"
 1 => Array (12)
id_currency => "1"
name => "Euro"
iso_code => "EUR"
iso_code_num => "978"
sign => "€"
blank => "1"
format => "2"
decimals => "1"
conversion_rate => "1.000000"
deleted => "0"
active => "1"
id_shop => "1"

 

Je cible le 0 pour avoir la conversion en dollar

Edited by Fanyyy974 (see edit history)

Share this post


Link to post
Share on other sites

Et avec ça :

 

{assign var="price" value=$product->getPrice(true, $smarty.const.NULL, 2)}
{displayPrice price=$price currency=$currencies.0.id_currency}

 

La fonction displayPrice attends un int (id_currency) en argument, et pas un tableau...

Sinon elle se content d'afficher le prix, sans faire de conversion :

 

    public static function displayPriceSmarty($params, &$smarty)
   {
       if (array_key_exists('currency', $params))
       {
           $currency = Currency::getCurrencyInstance((int)($params['currency']));
           if (Validate::isLoadedObject($currency))
               return Tools::displayPrice($params['price'], $currency, false);
       }
       return Tools::displayPrice($params['price']);
   }

Edited by DrÿSs' (see edit history)

Share this post


Link to post
Share on other sites

Quand à la fonction convertPriceWithCurrency, elle ne fait aucune conversion (oui elle porte mal son nom ^^).

Edited by DrÿSs' (see edit history)

Share this post


Link to post
Share on other sites

En fait displayPrice en smarty ne fait aucune conversion non plus :D

Il n'y a aucun alias smarty dans PrestaShop à ma connaissance qui fait de la conversion...

 

L'alias convertPrice appel Product::convertPrice(), qui lui même appel Tools::displayPrice(), qui lui même ne fait aucune conversion !

 

Bref le seul moyen c'est de passer par Tools::convertPrice() qui n'a aucun alias smarty dans PrestaShop :D

Share this post


Link to post
Share on other sites

J'étais partie sur la fonction convertPriceWithCurrency car effectivement le nom était trompeur :P

 

Cependant avec

{assign var="price" value=$product->getPrice(true, $smarty.const.NULL, 2)}
{displayPrice price=$price currency=$currencies.0.id_currency}

 

J'obtiens toujours $9,90.

 

C'est un grand mystère :blink:

Share this post


Link to post
Share on other sites

Sinon tu peux ajouter ton propre alias smarty dans config/smarty.config.inc.php :

 

smartyRegisterFunction($smarty, 'function', 'realConvertPrice', array('Tools', 'convertPrice'));

Share this post


Link to post
Share on other sites

J'avais butté là-dessus moi aussi pour mon module de prépaiement, aucun alias smarty existant, je pense que l'actuel convertPrice "bug", il devrait rediriger sur Tools et non Product.

Share this post


Link to post
Share on other sites

Tu peux juste me réexpliquer dans quel ordre je dois procéder stp. J'ai bien peur d'avoir mélanger toute tes réponses et de ne pas obtenir le bon résultat :wacko:

Share this post


Link to post
Share on other sites

Héhé,

 

Alors soit tu fais ta conversion en PHP dans ton contrôleur en utilisant Tools::convertPrice(), et ensuite tu assigne ta variable à Smarty pour la récupérer dans ton template, par exemple :

 

    $this->context->smarty->assign(
	    array(
		    'price' => Tools::convertPrice($price, (int)$this->context->currency->id),
	    )
    );

 

Sinon, tu peux aussi essayer d'appeler directement la fonction dans smarty, par exemple :

 

{assign var="price" value=$product->getPrice(true, $smarty.const.NULL, 2)}
{assign var="convertedPrice" value=Tools::convertPrice($price, $currencies.0.id_currency)}
Prix : {$convertedPrice}

 

Ou alors tu créé ton propre register function dans config/smarty.config.inc.php :

 

smartyRegisterFunction($smarty, 'function', 'realConvertPrice', array('Tools', 'convertPrice'));

 

Et tu l'appel dans ton template :

 

{assign var="price" value=$product->getPrice(true, $smarty.const.NULL, 2)}
Prix : {realConvertPrice price=$price currency=$currencies.0.id_currency}

Share this post


Link to post
Share on other sites

Merci beaucoup ! J'ai appliqué la deuxième solution et elle marche parfaitement. Il ne me reste plus qu'à arrondir le prix et ça sera bon.

 

Merci encore pour ton aide :)

Share this post


Link to post
Share on other sites

Pour arrondir le prix, je te conseille d'utiliser :

 

{displayPrice price=$convertedPrice currency=$currencies.0.id_currency}

 

Il arrondit en utilisant la règle de la devise et l'affiche correctement.

Edited by DrÿSs' (see edit history)

Share this post


Link to post
Share on other sites

Bonjour DrÿSs' et Fanyyy974,

je suis votre post et essai d'afficher les prix dans 2 devises, pour la page produit.

Je précise que je suis sous 1.4 j'ai réussi les modifs, sauf l'arrondi.

DrÿSs' penses tu que c'est possible de faire le même affichage dans la liste de produit ?

Edited by Tramber (see edit history)

Share this post


Link to post
Share on other sites
Bonjour

j'ai le même problème qui est expliqué, je veux afficher le prix en dinar(devise par défaut) et en entre parenthèses le prix en dollars.

​je suis débutante en développement :( quelqu'un m'aider SVP  urgent

Merci

Share this post


Link to post
Share on other sites

Hello merci pour le petit tuto je chercherais à afficher le code iso de la monnaie et non le symbole,

 

j'ai cherché avec: $currency->iso_code mais.... une idée de comment faire ?

 

Merci d'avance

Share this post


Link to post
Share on other sites

Hello, cela marche, sauf lorsque on fait une règle spécifique pour le prix en Dollars ? Une idée de comment l'afficher ?

Share this post


Link to post
Share on other sites

Autre petite chose que je viens de remarquer, cela ne prend pas en compte un prix différent de déclinaison....

Share this post


Link to post
Share on other sites

Hello, cela marche, sauf lorsque on fait une règle spécifique pour le prix en Dollars ? Une idée de comment l'afficher ?

 

Petit up... Avec un prix spécifique dans une autre devise impossbile à afficher... une idée ?

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More