xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Убрать копейки из цен в Commerce

Опубликовано в

Глобально убрать копейки из рублёвых цен:

/**
 * 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 1
Похожие записи

Комментарии RSS

А какой смысл делать лишние телодвижения если все остальное работает по дефолту. Перепроверил, оказывается коммерс хранит цены в копейках.

т. е. если до преобразования цена была написана как 5,00 то в базе она хранится как 500 копеек.

а после

$currencies['RUB']['decimals'] = 0;

в базе по сути хранятся не копейки а рубли. Если не прав надеюсь автор поправит.

да, косяк, не заметил как-то

обновил пост

Огромнейшее спасибо-все работает! И вьюшки и поля и вся лабуда... Вы батюшка, гений!

Неужели из-за такой дребедени нужно добавлять модуль,чтоб получить callback функцию. Мне, к примеру, нужно всего лишь обернуть symbol (руб.) в span. Нельзя ли как-то проще, но "правильно" сделать в теме?

При выводе поля Price в слайдер с помощью search_api_ranges всё равно отображаются копейки.

Подскажите, а где именно (в каком документе) нужно разместить этот код?

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании