You are here

function money_field_formatter_view in Money field 7

Implements hook_field_formatter_view().

File

./money.module, line 226
This module defines the Money field.

Code

function money_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();

  // Dependency required by CurrencyLocalePattern class.
  ctools_include('export');
  foreach ($items as $delta => $item) {
    $currency = $item['currency'];
    $currency_object = currency_load($currency);
    $currency_pattern = CurrencyLocalePattern::loadFromEnv();
    $symbol = $currency_object->sign;
    $decimal_separator = $currency_pattern->symbol_decimal_separator;
    $grouping_separator = $currency_pattern->symbol_grouping_separator;

    // Amount with currency-based decimal and grouping separators.
    $amount = number_format($item['amount'], $field['settings']['scale'], $decimal_separator, $grouping_separator);

    // Amount with currency-based decimal and grouping separators and a currency symbol.
    $amount_with_symbol = $display['type'] == 'money_default' ? $currency_object
      ->format($item['amount']) : $item['amount'];
    $output = '';
    foreach (explode('|', $instance['widget']['settings']['currency_display_mode']) as $option) {
      switch ($option) {
        case 'a':

          // The amount.
          $output .= $amount;
          break;
        case 'as':

          // Amount with currency symbol.
          $output .= $amount_with_symbol;
          break;
        case 'c':

          // Currency code.
          $output .= $currency;
          break;
        case 's':

          // Currency symbol.
          $output .= $symbol;
          break;
        case '+':

          // Separator.
          $output .= $display['type'] == 'money_default' ? " " : ' ';
          break;
      }
    }
    $element[$delta] = array(
      '#markup' => $output,
    );
  }
  return $element;
}