Drupal 8: Field formatter

veröffentlicht von gngn am Do., 09.06.2016 - 17:37

Auch kleine Dinge sind anders in D8. Aber auch schön, wie z.B. bei Field formatter. Ein einfacher ist schnell gestrickt und kommt mit einer kleinen Datei, einer Klasse, einer annotation und einer Funktion aus.

Vorausgesetzt wir haben bereits ein Modul MY-MODULE, brauchen wir nicht viel:

  • eine neue Datei MY-MODULE/country/src/Plugin/Field/FieldFormatter/MyFormatter.php
  • mit namespace Drupal\country\Plugin\Field\FieldFormatter;
  • erweitern die Klasse FormatterBase,
  • in der annotation erklären wir uns zum FieldFormatter zu dem gewünschten Typ field_type_id:
    
     * @FieldFormatter(
     *   id = "my_formatter",
     *   module = "MY_MODULE",
     *   label = @Translation("My formatter"),
     *   field_types = {""}
     * )
  • Dabei ist field_type_id ein gültiger Drupal-field-Type wie z.B. "text", "text_long", "image", "comment", "file", ...
    Es kann natürlich auch ein selbstdefinierter Type sein oder - komma-getrennt - mehrere Typen:
    field_types = {"text", "comment", "my-very-own-type"}
  • Dann definieren wir die Funktion viewElements(), die - Überraschung - ein Render-array zurückliefert.

Und das wars schon :)

Zur Übersicht als ganze Datei:


<?php

/**
 * @file
 * Definition of Drupal\MY_MODULE\Plugin\Field\FieldFormatter\MyFormatter.
 */

namespace Drupal\country\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FormatterBase;

/**
 * Plugin implementation of the 'country' formatter showing the iso code.
 *
 * @FieldFormatter(
 *   id = "my_formatter",
 *   module = "MY_MODULE",
 *   label = @Translation("My formatter"),
 *   field_types = {
 *     ""
 *   }
 * )
 */
class MyFormatter extends FormatterBase {

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = array();
    foreach ($items as $delta => $item) {
      $elements[$delta] = array('#markup' => $item->value);
    }
    return $elements;
  }
}

Natürlich kann so ein Field formatter noch viel mehr haben, wie Settings, ein Template, etc. - siehe z.B. Community Documentation oder Writing a custom Drupal 8 field formatter.

Neuen Kommentar hinzufügen