#symfony #twig
#symfony #twig
Вопрос:
Я создаю систему, которая обрабатывает веса материалов, собираемых компанией. Из-за огромного количества собранных материалов клиент желает, чтобы веса отображались в тоннах (t), а не в килограммах (kg).
Однако данные, которые вводятся через csv, содержат все материалы в отдельных строках, все записанные в KG. Я могу сложить все KG вместе для отображения всех материалов, но я не уверен, как я могу отформатировать значение из KG в t.
Например, отображаются 10 материалов весом по 100 кг каждый. Всего получается 1000 кг, но я хочу отобразить его в тоннах, что будет либо 1 т, либо 1,0 т.
Как я могу этого добиться, используя twig и Symfony2?
Ответ №1:
Лучший способ сделать это — написать расширение для Twig, это просто, и таким образом вы сможете использовать его везде.
Как написать пользовательское расширение Twig
После расширения вы можете записать его как:
{{ KG|ton_format }}
Комментарии:
1. Это имело больше смысла, поэтому я использовал этот метод. Приветствия!
Ответ №2:
вы могли бы просто сделать это на symfony / php
если вам нужно округлить результат, используйте http://www.php.net/manual/de/function.round.php
$items = $fooRepository->findYourStuff();
$overallWeight=0;
for($items as $item){
$overallWeight = $item->getWeightInKilo();
}
$metricTons= $overallWeight/1000;
вы могли бы сделать то же самое в twig, но я бы убрал логику подальше от просмотра.
еще лучше было бы добавить в ваш entityClass метод, подобный :
public function getWeightInTons(){
return ( $this->getWeightInKilos() / 1000 );
}
затем в twig вы могли бы вызвать
{{ item.getWeightInTons }}
Ответ №3:
Плюс ответы ниже, вы также можете попробовать:
{% set total = 0 %}
{% for item in myStuff %}
{% set total = total item.getWeight %}
{% endfor %}
<span>Total: </span>{{ (total/1000)|round(2, 'floor') }}
Использование floor или ceil и степень точности зависят от вас
Ответ №4:
Если для переменной задан общий вес в килограммах, вы также можете использовать фильтры number_format
и format
:
{% set weight_in_kilos = 24450 %}
{{ (weight_in_kilos/1000)|number_format(1) }}t
{{ '%.1ft'|format(weight_in_kilos/1000) }}
Приведенный выше вывод:
24.5t
24.4t
Обратите внимание, как два фильтра по-разному обрабатывают округление: number_format
округляет математически, тогда как format
просто сокращает вывод, чтобы получить указанное количество десятичных знаков.