Jump to content

Modifier mise en forme du prix 99,38 en 99€38


Recommended Posts

Je ne suis pas sûr de comprendre..

En fait, la devise € est déjà affiché mais j'aimerais que au lieu qu'il soit placé comme ceci 99,33 € ( à la fin ) qu'il soit placer au milieu comme ceci 99 €33 ( sans la virgule et les centimes au minuscule)..

Link to comment
Share on other sites

Je suis allez voire dans la configuration des devises et on peut changer l'emplacement du signe de la devise, par contre il n'est pas proposé de mettre le signe d la devis en plein milieu, il faudrait alors regarder comment est construit cette partie là dans le coeur de Prestashop.

Cependant, la représentation des prix que vous souhaitez n'est pas standard il faudrait vérifier si cette représentation est légale.

Link to comment
Share on other sites

Je pensait aussi.. cependant je ne trouve pas où cela est configuré, dans quel fichier ?? Pour la représentation des prix, je pense bien que oui c'est légale, car les grandes enseigne telle que cdiscount, boulanger, etc.. utilise cette mise en forme de prix. C'est de là que je tiens cette idée de modification.

Link to comment
Share on other sites

Après analyse rapide il faut modifier le formulaire d'enregistrement de vos devises pour créer un nouveau format et ensuite modifier la fonction DisplayPrise dans la classe Tools en incluant votre nouveau format.

j'ai regardé sur une version 1.3, mais cela n'a pas dû trop changer sur la 1.4.

Link to comment
Share on other sites

Daccord ^^ .. Merci pour votre aide. Mais je croie que c'est un peu compliqué pour moi. Je ne sais pas où trouvé le formulaire et je ne suis pas sûr de pouvoir faire cette modif dans la fonction.. Je vais tout de même voir sur le site du zéro car je ne connait plus trop les fonctions et variables.. Je ne voudrai pas abuser de votre gentillesse mais pourriez-vos me dire ou est stocké le formulaire que je doit modifier ?

Merci encore.. J'essayerai demain.

Link to comment
Share on other sites

Bon, j'ai essayé en modifier simplement la fonction pour le format actuelle de ma devise et le sigle de la monnaie ne s'affiche pas si je le met à la place de la virgule actuelle.

Il semble que Prestashop s'amuse à remodifier après l'affichage du prix, donc si c'est possible cela demande beaucoup plus d’effort.

Peut être un format de devis à proposer à Prestashop pour une prochaine version.

Link to comment
Share on other sites

Très bien.. Merci bien de votre aide.

Je vais essayer aussi.. mais si cela demande trop d'effort alors je ne sais pas si le jeux en vos la chandelle.. Mais pourtant je trouve que cette affichage est bien plus intuitif car en mettant les centimes en plus petite taille ce dernier ne rentre plus en concurrence (du à la taille) avec les chiffres au-dessus de la virgule et du coup le prix parait plus assimilable et moins imposant.

Bon c'est mon point de vue ;-)

Bon si je réussi, je met l'astuce ici. Mais j'en doute..

Link to comment
Share on other sites

Très bien.. Merci bien de votre aide.

Je vais essayer aussi.. mais si cela demande trop d'effort alors je ne sais pas si le jeux en vos la chandelle.. Mais pourtant je trouve que cette affichage est bien plus intuitif car en mettant les centimes en plus petite taille ce dernier ne rentre plus en concurrence (du à la taille) avec les chiffres au-dessus de la virgule et du coup le prix parait plus assimilable et moins imposant.

Bon c'est mon point de vue ;-)

Bon si je réussi, je met l'astuce ici. Mais j'en doute..


Après il est peut être possible d'encadrer les centimes avec une balise afin de pourvoir configurer la taille dans le CSS.
Link to comment
Share on other sites

Oui je pensait faire ça. Mais (blague à part) je ne trouve pas le fichier pour modifier le prix.. Je cherche mais je ne sais pas où il est :P


alors j'ai eu une idée dans la classe Tools il faut rechercher la fonction displayPrice()

Si, comme tout le monde, vous avez choisi l'affichage suivant le format 2 (x xxx,xx €) alors il faut modifier la partie correspondant
case 2:

là il faudrait prendre la chaîne price, la couper en 2 partie en fonction du nombre de décimales proposées et de mettre entre ces 2 partie le sigle de la monnaie et entourer les centimes d'un afin de pourvoir configurer la taille de la police en CSS.
Link to comment
Share on other sites

J'ai trouvé ce code

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;



Mais est ce que après ca ne poas poser de soucis par apport au moyen de paiment PayPal et autre, qui utilisent des point comme virgule ?? Bref je verrai ca plus tard..

Link to comment
Share on other sites

Donc je pourrai faire comme ceci ?

  case 2:
               $ret = number_format($price, $c_decimals, '€', ' ').$blank.$c_char;
               break;
           /* X 0.000,00 */



Mais le souci c'est que sa s'affiche un losange avec un point d'interrogation ( à la place de la virgule) au lieu du € et il ne reconnait pas non plus le langage de caractère spéciaux html. En revanche les lettre normal sa marche..

45492_rjOhrpLrriNJ477rHqGs_t

Link to comment
Share on other sites

Donc je pourrai faire comme ceci ?
  case 2:
               $ret = number_format($price, $c_decimals, '€', ' ').$blank.$c_char;
               break;
           /* X 0.000,00 */



Mais le souci c'est que sa s'affiche un losange avec un point d'interrogation ( à la place de la virgule) au lieu du € et il ne reconnait pas non plus le langage de caractère spéciaux html. En revanche les lettre normal sa marche..


Comme expliqué avant cela ne focntionne pas car cette fonction number_format() n'accepte pas les caractères à octets multiple comme l'euro. ainsi il ne peut en gros prendre qu'un seul caractère (1 octet).

Donc il faut revoir toute la fonction pour découper la chaine de caractère en la séparant avec les x décimales et refaire la chaine de caractère.
Link to comment
Share on other sites

Bonjour,

j'ai trouvé la solution :

case 2:
               $prix = explode(".",$price);
               if (empty($prix[1])) {$prix[1] = '00';}
               if (strlen($prix[1]) < 2) {$prix[1] = $prix[1].'0';}
               $ret = $prix[0].$c_char.''.$prix[1].'';
               break;

Link to comment
Share on other sites

A priori oui :-) sa a l'air de marché !!!

Dans le FO la modification se fait aussi mais ne crée apparemment pas de bug. Pour PayPal aussi, rien ne change, pas de bug.. Il y a simplement un petit travail de css à faire, mais tout a l'air de fonctionner parfaitement...!

Et bien , un grand " MERCI " pour ton aide jeckyl et pour m'avoir donné de ton temps ! Je vais faire encore des petits test mais sa a l'air de tourné rond ^^.

Merci encore..

PS : je sauvegarde tout sa !! :-)

Link to comment
Share on other sites

Euh.. dernier petit point y aurai-til une astuce pour éviter ceux bug dans la partie panier header ? ( la balise span s'affiche comme du texte )

J'ai pensé à utiliser le css du genre : #class span {display:none;} mais il y a peut être plus propre ??!

45496_QcIx8b8Ui0ZGiNmTRIv6_t

Link to comment
Share on other sites

Ah.. j'ai détecté un autre petit truc.. c'est lorsque le produit à des attributs (déclinaison), le prix se met comme d'origine (avec la virgule et le € à la fin)

Les attributs utilisent peuvent-être un code qui viens d'ailleurs ?

Ps : le module page accueil, je l'ai fait moi même.. donc il n'y à rien de dynamique, que du static, mais bon c'est pour dépanné vue que je ne change pas tout les jours de page d'accueil..

Link to comment
Share on other sites

Ah.. j'ai détecté un autre petit truc.. c'est lorsque le produit à des attributs (déclinaison), le prix se met comme d'origine (avec la virgule et le € à la fin)

Les attributs utilisent peuvent-être un code qui viens d'ailleurs ?

Ps : le module page accueil, je l'ai fait moi même.. donc il n'y à rien de dynamique, que du static, mais bon c'est pour dépanné vue que je ne change pas tout les jours de page d'accueil..


Bon il semble qu'il y ai encore des soucis, il faut alors chercher à chaque fois comment est affiché ce prix et alors corriger le truc.
Link to comment
Share on other sites

Encore un petit truc et j'arrète.. est-il possible de mettre le € de la même taille que les centimes ?? Car j'ai regardé chez les e-commerçant, c'est de cette façons qu'il procède.. " 33 en grand et puis €25 en plus petit ".

Link to comment
Share on other sites

Encore un petit truc et j'arrète.. est-il possible de mettre le € de la même taille que les centimes ?? Car j'ai regardé chez les e-commerçant, c'est de cette façons qu'il procède.. " 33 en grand et puis €25 en plus petit ".


il faut juste déplacer la balise pour englober la devise.
Link to comment
Share on other sites

Une soluce pour éviter de modifier la classe, mais qui demande de modifier les tpl qui affichent des prix :

{capture name='europrice'}
    {convertPrice price=$product->getPrice(true, $smarty.const.NULL)}
{/capture}

{assign var='formattedEuro' value=$smarty.capture.europrice}
{assign var='testEuro' value=","|explode:$formattedEuro}
{$testEuro[0]}€{$testEuro[1]|substr:0:2}



Penser à rajouter un test sur la devise s'il n'y a pas que des Euro à gérer de la sorte ;)

Link to comment
Share on other sites

Pour le code ci-dessus je ne comprend pas trop comment l'utiliser..


Mais je pense que la première solution est bonne mais j'ai le soucis avec les span qui s'affiche en texte dans les panier header et blockcart et aussi le € dont je ne sais pas déplacer le dans le script mais bon j'essaye..

Link to comment
Share on other sites

Cette ligne :

{convertPrice price=$product->getPrice(true, $smarty.const.NULL)}


se trouve dans le product.tpl (je l'ai pris à titre d'exemple).
Je capture le contenu qu'elle renvoie, je découpe sur la virgule, puis j'affiche chaque partie (le substr à la fin sert à virer le signe € qui arrive directement dans les cents)
Ya plus qu'a adapter pour les autres blocs s'il renvoient le prix sous un autre format ;)

Link to comment
Share on other sites

Effectivement une bonne astuce aussi, car sa ne fait pas buguer les prix des paniers ( span ) mais en revanche est-til possible de modifier la taille du €+centime comme dans la première solution ? c'est à dire par exemple pour 33€90 : 33 (en grand) et €90 (en taille plus petite choisi).

Link to comment
Share on other sites

Super impeccable, sa marche comme sur des roulettes ^^.

Petite question si jamais un jour je dois afficher les taxe ou d'autre devise, par exemple le dollars, est-ce qu'il faudra modifier le code ?

En tout les cas merci, c'est pile se qu'il me fallait.. ;-)

Link to comment
Share on other sites

Effectivement, je viens de voir ca.
Il faut adapter le product.js qui gère les déclinaisons et qui donc réécrit le prix.
Il faut faire une modif du genre :

$('#our_price_display').text(formatCurrency(priceProduct, currencyFormat, currencySign, currencyBlank));
$('#pretaxe_price_display').text(formatCurrency(productPricePretaxed, currencyFormat, currencySign, currencyBlank));
$('#old_price_display').text(formatCurrency(productPriceWithoutReduction2, currencyFormat, currencySign, currencyBlank));
$('#ecotax_price_display').text(formatCurrency(selectedCombination['ecotax'], currencyFormat, currencySign, currencyBlank));



remplacé par :

               var ourPrice = formatCurrency(priceProduct, currencyFormat, currencySign, currencyBlank);
               var finalPriceProduct = ourPrice.split(',');
       var ourPriceEuro = finalPriceProduct[0];
       var ourPriceEurocents = finalPriceProduct[1];
               $('#our_price_display').text(''.ourPriceEuro.''.currencySign.ourPriceEurocents.'');

               var pretaxePrice = formatCurrency(productPricePretaxed, currencyFormat, currencySign, currencyBlank);
               var finalPriceProduct = pretaxePrice.split(',');
       var pretaxePriceEuro = finalPriceProduct[0];
       var pretaxePriceEurocents = finalPriceProduct[1];
               $('#pretaxe_price_display').text(''.pretaxePriceEuro.''.currencySign.pretaxePriceEurocents.'');

               var oldPrice = formatCurrency(productPriceWithoutReduction2, currencyFormat, currencySign, currencyBlank);
               var finalPriceProduct = oldPrice.split(',');
       var oldPriceEuro = finalPriceProduct[0];
       var oldPriceEurocents = finalPriceProduct[1];
               $('#old_price_display').text(''.oldPriceEuro.''.currencySign.oldPriceEurocents.'');

               var ecotaxPrice = formatCurrency(selectedCombination['ecotax'], currencyFormat, currencySign, currencyBlank);
               var finalPriceProduct = ecotaxPrice.split(',');
       var ecotaxPriceEuro = finalPriceProduct[0];
       var ecotaxPriceEurocents = finalPriceProduct[1];
               $('#ecotax_price_display').text(''.ecotaxPriceEuro.''.currencySign.ecotaxPriceEurocents.'');



Je viens de tester à l'arrache et ca marche.
Le code est perfectible, il faudrait rajouter des tests sur Currency aussi pour adapter selon la devise mais l'esprit est là ;)

Link to comment
Share on other sites

Si le but est d'afficher 20€80 ou 8$75 ou 15£24 il n'y aura rien besoin de modifier.
Si le but est de ne modifier que l'affichage en euro, et donc laisser 8,75$ ou 15,24£ (ou £15,24, je ne sais pas dans quel ordre ca s'écrit), il faudra déplacer $currencySign (en comparant $cart.id_currency par exemple je pense).
La réponse est incomplète mais la piste est là, j'ai pas beaucoup plus de temps pour tester pour le moment ;)

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