Глобально убрать копейки из рублёвых цен:
Commerce 1
/**
* Implements hook_commerce_currency_info_alter().
*/
function MODULENAME_commerce_currency_info_alter(&$currencies, $langcode) {
// Запрещаем оперировать копейками
$currencies['RUB']['rounding_step'] = 1;
// Удаляем копейки из вывода
$currencies['RUB']['format_callback'] = 'MODULENAME_rub_currency_format';
}
/**
* Currency format callback.
*/
function MODULENAME_rub_currency_format($amount, $currency, $object) {
$round_amount = commerce_currency_round(abs($amount), $currency);
$price = number_format($round_amount, 0, $currency['decimal_separator'], $currency['thousands_separator']);
$replacements = array(
'@code_before' => $currency['code_placement'] == 'before' ? $currency['code'] : '',
'@symbol_before' => $currency['symbol_placement'] == 'before' ? $currency['symbol'] : '',
'@price' => $price,
'@symbol_after' => $currency['symbol_placement'] == 'after' ? $currency['symbol'] : '',
'@code_after' => $currency['code_placement'] == 'after' ? $currency['code'] : '',
'@negative' => $amount < 0 ? '-' : '',
'@symbol_spacer' => $currency['symbol_spacer'],
'@code_spacer' => $currency['code_spacer'],
);
return trim(t('@code_before@code_spacer@negative@symbol_before@price@symbol_spacer@symbol_after@code_spacer@code_after', $replacements));
}
Если нужно убрать вывод копеек в отдельных полях, то поможет модуль Commerce Price Decimals Formatter.
Commerce 2
Во втором комерце достаточно в настройках валюты admin/commerce/config/currencies
установить опцию Fraction digits в 0
.
Написанное актуально для
Commerce 1, Commerce 2
Комментарии
А какой смысл делать лишние телодвижения если все остальное работает по дефолту. Перепроверил, оказывается коммерс хранит цены в копейках.
т. е. если до преобразования цена была написана как 5,00 то в базе она хранится как 500 копеек.
а после
$currencies['RUB']['decimals'] = 0;
в базе по сути хранятся не копейки а рубли. Если не прав надеюсь автор поправит.
да, косяк, не заметил как-то
обновил пост
https://drupal.org/project/commerce_extra_price_formatters
Огромнейшее спасибо-все работает! И вьюшки и поля и вся лабуда... Вы батюшка, гений!
Неужели из-за такой дребедени нужно добавлять модуль,чтоб получить callback функцию. Мне, к примеру, нужно всего лишь обернуть symbol (руб.) в span. Нельзя ли как-то проще, но "правильно" сделать в теме?
https://www.drupal.org/node/522036
При выводе поля Price в слайдер с помощью search_api_ranges всё равно отображаются копейки.
Подскажите, а где именно (в каком документе) нужно разместить этот код?
Использую этот хук в template.php темы также для оборачивания спаном руб. Все бы хорошо но имеются проблема на административных страницах редактирования товара Error: Call to undefined function custom_commerce_currency_format(). Если добавляю функцию также в шаблон админки начинает работать редактирование, но перестает заходить в конфигурацию.
Подскажите, пожалуйста, прописываю, сбрасываю кеш, создаю новый товар, сохраняю, при редактировании всё равно отображаются копейки.
В чем может быть проблема?
Для Drupal 8 и commerce 2 можно переопределить сервис commerce_price.currency_formatter, добавив в опции по умолчанию:
'minimum_fraction_digits' => 0
https://drupal.org/project/commerce_extra_price_formatters - этот модуль убирает нули только в админку, как выпилить нули с фронтенда?
спасибо за решение!
Приветствую. Спасибо за решение!
Подскажите, пожалуйста, следующий момент. В паре с вашим решением использую модуль https://www.drupal.org/project/commerce_discount. И вот с какой проблемой столкнулся. Пример: цена товара 1042р., скидка 6%, цена со скидкой 979р. - так это выглядит для пользователя. В БД цена хранится в копейках и выглядит так: цена 104200, скидка -6252, цена со скидкой 97948. Если добавить в корзину два таких товара, то цена в копейках будет равной 97948*2=195896 и округлится до 1959р. Пользователь в корзине видит лишний рубль — 979*2=1959. Я понимаю, что где-то нужно добавить округление, но вот где...
Спасибо за любую помощь.
Drupal 8
Я меня была проблема с выводом цены search api через views (выводило в конце суммы четыре ноля)
Решено переопределение поля во views с использованием фильтра twig(https://twig.symfony.com/doc/3.x/filters/slice.html)
Пример удаляет последние 4 знака строки:
{{ number | slice(0, -4) }}
{{ nuber}} - это поле цены из подстановочного шаблона для переопределения.
Добавить комментарий