NumericFormatterBase.php

Same filename in other branches
  1. 9 core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php
  2. 10 core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php
  3. 11.x core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php

Namespace

Drupal\Core\Field\Plugin\Field\FieldFormatter

File

core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php

View source
<?php

namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\AllowedTagsXssTrait;
use Drupal\Core\Field\FormatterBase;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;

/**
 * Parent plugin for decimal and integer formatters.
 */
abstract class NumericFormatterBase extends FormatterBase {
    use AllowedTagsXssTrait;
    
    /**
     * {@inheritdoc}
     */
    public function settingsForm(array $form, FormStateInterface $form_state) {
        $options = [
            '' => t('- None -'),
            '.' => t('Decimal point'),
            ',' => t('Comma'),
            ' ' => t('Space'),
            chr(8201) => t('Thin space'),
            "'" => t('Apostrophe'),
        ];
        $elements['thousand_separator'] = [
            '#type' => 'select',
            '#title' => t('Thousand marker'),
            '#options' => $options,
            '#default_value' => $this->getSetting('thousand_separator'),
            '#weight' => 0,
        ];
        $elements['prefix_suffix'] = [
            '#type' => 'checkbox',
            '#title' => t('Display prefix and suffix'),
            '#default_value' => $this->getSetting('prefix_suffix'),
            '#weight' => 10,
        ];
        return $elements;
    }
    
    /**
     * {@inheritdoc}
     */
    public function settingsSummary() {
        $summary = [];
        $summary[] = $this->numberFormat(1234.123456789);
        if ($this->getSetting('prefix_suffix')) {
            $summary[] = t('Display with prefix and suffix.');
        }
        return $summary;
    }
    
    /**
     * {@inheritdoc}
     */
    public function viewElements(FieldItemListInterface $items, $langcode) {
        $elements = [];
        $settings = $this->getFieldSettings();
        foreach ($items as $delta => $item) {
            $output = $this->numberFormat($item->value);
            // Account for prefix and suffix.
            if ($this->getSetting('prefix_suffix')) {
                $prefixes = isset($settings['prefix']) ? array_map([
                    'Drupal\\Core\\Field\\FieldFilteredMarkup',
                    'create',
                ], explode('|', $settings['prefix'])) : [
                    '',
                ];
                $suffixes = isset($settings['suffix']) ? array_map([
                    'Drupal\\Core\\Field\\FieldFilteredMarkup',
                    'create',
                ], explode('|', $settings['suffix'])) : [
                    '',
                ];
                $prefix = count($prefixes) > 1 ? $this->formatPlural($item->value, $prefixes[0], $prefixes[1]) : $prefixes[0];
                $suffix = count($suffixes) > 1 ? $this->formatPlural($item->value, $suffixes[0], $suffixes[1]) : $suffixes[0];
                $output = $prefix . $output . $suffix;
            }
            // Output the raw value in a content attribute if the text of the HTML
            // element differs from the raw value (for example when a prefix is used).
            if (isset($item->_attributes) && $item->value != $output) {
                $item->_attributes += [
                    'content' => $item->value,
                ];
            }
            $elements[$delta] = [
                '#markup' => $output,
            ];
        }
        return $elements;
    }
    
    /**
     * Formats a number.
     *
     * @param mixed $number
     *   The numeric value.
     *
     * @return string
     *   The formatted number.
     */
    protected abstract function numberFormat($number);

}

Classes

Title Deprecated Summary
NumericFormatterBase Parent plugin for decimal and integer formatters.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.