You are here

public function FieldFormatter::getField in Twig Extender 8.4

Same name and namespace in other branches
  1. 8.2 modules/twig_extender_extras/src/Plugin/TwigPlugin/FieldFormatter.php \Drupal\twig_extender_extras\Plugin\TwigPlugin\FieldFormatter::getField()
  2. 8.3 modules/twig_extender_extras/src/Plugin/TwigPlugin/FieldFormatter.php \Drupal\twig_extender_extras\Plugin\TwigPlugin\FieldFormatter::getField()
  3. 4.x modules/twig_extender_extras/src/Plugin/TwigPlugin/FieldFormatter.php \Drupal\twig_extender_extras\Plugin\TwigPlugin\FieldFormatter::getField()

Implementation for render field formatter.

Parameters

\Drupal\Core\Field\FieldItemList $field: FieldItemList to display with formatter.

string $formatter: Formatter plugin id to use.

string $label: Label option for formatter, could be hidden|above|inside.

array $settings: Settings for formatter plugin.

int $maxItems: How many items to display.

int $offset: Offset to start from.

Return value

array Array for rendering.

File

modules/twig_extender_extras/src/Plugin/TwigPlugin/FieldFormatter.php, line 41

Class

FieldFormatter
The plugin to render a field with a specific formatter.

Namespace

Drupal\twig_extender_extras\Plugin\TwigPlugin

Code

public function getField(FieldItemList $field, $formatter, $label = 'hidden', array $settings = [], $maxItems = -1, $offset = 0) {
  $formatterService = \Drupal::service('plugin.manager.field.formatter');
  try {
    $plugin = $formatterService
      ->getDefinition($formatter);
    $field_type = $field
      ->getFieldDefinition()
      ->getType();
    $field_options = $formatterService
      ->getOptions();
    $default_settings = $formatterService
      ->getDefaultsettings($formatter);
    $settings = NestedArray::mergeDeep($default_settings, $settings);
    $renderer = \Drupal::service('renderer');
    if ($offset > 0) {
      if (!$field
        ->offsetExists($offset)) {
        $build = [];
        $renderer
          ->addCacheableDependency($build, $field
          ->getEntity());
        return $build;
      }
      for ($i = 0; $i < $offset; $i++) {
        $field
          ->removeItem(0);
      }
    }
    if ($maxItems > 0 && $maxItems != $field
      ->count()) {
      $remove = $field
        ->count() - $maxItems;
      for ($i = 0; $i < $remove; $i++) {
        $field
          ->removeItem(1);
      }
    }
    $field_to_view = $field
      ->view([
      'type' => $formatter,
      'settings' => $settings,
      'label' => $label,
    ]);
    return $field_to_view;
  } catch (\Exception $e) {
    \Drupal::logger('twig_extender_extras')
      ->error($e
      ->getMessage());
    throw $e;
  }
}