Geld in Zweigvorlagen formatieren

69

Gibt es Filter oder ähnliches in der Zweigvorlagen-Engine, um Geld oder Zahlen zu formatieren?

Umpirsky
quelle
2
Seit der Veröffentlichung von Twig Extensions 1.2.0 im Oktober 2014 steht ein localizedcurrencyFilter zur Verfügung, mit dem Geld in Twig basierend auf dem Gebietsschema formatiert werden kann. Weitere Informationen finden Sie in meiner Antwort .
Nic Wortel

Antworten:

114

Der number_formatFilter ist seit Ende Dezember 2011 im Twig-Kern enthalten. Das entsprechende Commit finden Sie hier .

Verwendung: number_format(decimals, decimalSeparator, thousandSeparator)

{{ total|number_format(2) }}
{{ total|number_format(0, '.') }}
{{ total|number_format(2, '.', ',') }}

Lesen Sie mehr darüber in den Dokumenten

Jrgns
quelle
3
Gibt es keine Möglichkeit, dieses Benutzergebietsschema sensibel zu machen?
Fnagel
10
Erstaunlicherweise deuten keine der Dokumentationen und keine der SO-Antworten darauf hin, dass Sie das erste Argument in Klammern setzen müssen, wenn es sich um eine Formel handelt. Ich hatte {{ 100*done/total | number_format(2) }}und es dauerte gut 30 Minuten, um herauszufinden, warum das Ergebnis falsch war. Du musst schreiben {{ (100*done/total) | number_format(2) }}.
Timwi
1
@Timwi , die Art ist zu erwarten , da Sie die sind Rohrleitungen totalauf dem Zweig Filter
Vitalii Zurian
4
@VitaliyZurian: Es wird nur erwartet, wenn Sie die Priorität des Operators kennen.
Timwi
1
@ Timwi vielen Dank, ich hatte das gleiche Problem
TSGames
37

Die Twig Extensions-Bibliothek enthält eine Reihe nützlicher Erweiterungen für Twig. Mit der Veröffentlichung von Version 1.2.0 wurde der Intl-Erweiterung ein localizedcurrencyFilter hinzugefügt. Wie der Name schon sagt, formatiert dieser Filter eine Nummer basierend auf dem aktuellen Gebietsschema. Dazu wird die PHP- NumberFormatterKlasse verwendet.

Verwendung

Dieser Filter ist sehr einfach zu bedienen. Das einzige erforderliche Argument für den Filter ist der dreistellige Währungscode ISO 4217 . Verwenden Sie beispielsweise die folgende Codezeile, um einen Betrag von 27,99 Euro anzuzeigen:

{{ price|localizedcurrency('EUR') }}

Dies zeigt je nach Gebietsschema unterschiedliche Ergebnisse an:

  • €27.99 wenn das Gebietsschema auf eingestellt ist en
  • 27,99 € wenn das Gebietsschema auf eingestellt ist fr
  • € 27,99 wenn das Gebietsschema auf eingestellt ist nl

Installation / Festlegen des Gebietsschemas

Installationsanweisungen für die Intl-Erweiterung finden Sie in dieser separaten Antwort .

Nic Wortel
quelle
Wie soll man das Thousand Separatorin deaktivieren localizednumber??
Pmpr
1
@Trix interessante Frage. Dies ist mit PHPs möglich NumberFormatter, aber Sie müssen eine benutzerdefinierte Twig-Erweiterung schreiben, da der localizedcurrencyFilter dies nicht unterstützt. Ich denke, dies verdient jedoch eine eigene Frage zum Stapelüberlauf. Wenn Sie die Frage posten und mir den Link senden, werde ich dort meine Antwort posten.
Nic Wortel
Mehr gut als number_format Methode denke ich, aber beide funktionieren gut
David
Ich bin begeistert von diesen Filtern für lokalisierte Währung, lokalisiertes Datum und lokalisierte Nummer. Im Fall der lokalisierten Nummer würde ich jedoch gerne eine feste Anzahl von Dezimalstellen definieren. Im Moment sehe ich die Zahlen mit einer Anzahl von Dezimalstellen, die am besten vom Filter erreicht werden, aber keine einheitliche Ausgabe anzeigen. In derselben Spalte können 0, 1, 2, 3 Dezimalstellen stehen ... In der Dokumentation kann ich keinen Weg finden, wie ich damit umgehen soll. Irgendeine Idee??? @NicWortel
xarlymg89
Fand es! localizednumber ist großartig, aber format_number (nicht mit number_format verwechseln) ist großartig. Weitere Informationen hier: stackoverflow.com/questions/58662974/…
xarlymg89
11

Wenn Sie eine ältere Version von twig verwenden und keine Erweiterungen installieren möchten, können Sie den Formatfilter wie folgt verwenden:

{{ "%.2f"|format(total) }}

Nicht sehr schön, aber es funktioniert.

Funktioniert grundsätzlich formatwie die sprintfFunktion von PHP

Jens
quelle
Ich habe dies verwendet und kann bestätigen, dass es funktioniert. Können Sie erklären, wie es funktioniert?
Sam
2
Keine Notwendigkeit, ich habe es ausgearbeitet. formatfunktioniert wie die PHP- sprintfFunktion und kann die Währungsformatierung durchführen .
Sam
1

Verwenden Sie die format_currency

Ab Version 2.12 wurde format_currencyFilter hinzugefügt. Weitere Informationen finden Sie in der offiziellen Dokumentation unter https://twig.symfony.com/doc/2.x/filters/format_currency.html

Panagiotis Koursaris
quelle
Der format_currencyFilter ist ziemlich schlecht, da es üblich ist, Geld als ganze Zahlen zu speichern, und der Filter zeigt die ganze ganze Zahl ...
GondyB