rocketship_core-8.x-2.0-alpha11/src/Plugin/Field/FieldFormatter/TabbedFormatter.php
src/Plugin/Field/FieldFormatter/TabbedFormatter.php
<?php namespace Drupal\rocketship_core\Plugin\Field\FieldFormatter; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Field\FormatterBase; use Drupal\Core\Form\FormStateInterface; /** * Plugin implementation of the 'tabbed_formatter' formatter. * * @FieldFormatter( * id = "tabbed_formatter", * label = @Translation("Tabbed field formatter"), * field_types = { * "tabbed_item" * } * ) */ class TabbedFormatter extends FormatterBase { /** * {@inheritdoc} */ public static function defaultSettings() { return [ 'header' => 'h2', ] + parent::defaultSettings(); } /** * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { $form = parent::settingsForm($form, $form_state); $form['header'] = [ '#type' => 'select', '#title' => t('Header tag'), '#options' => $this->getOptions(), '#default_value' => $this->getSetting('header'), '#description' => t('Define the header tag element that will be wrapped around this field.'), ]; return $form; } /** * {@inheritdoc} */ public function settingsSummary() { $summary = parent::settingsSummary(); $summary[] = t('Header element: @header', ['@header' => $this->getSetting('header')]); return $summary; } /** * Return the options for the select element. * * @return array * The options array. */ protected function getOptions() { return [ 'h1' => 'h1', 'h2' => 'h2', 'h3' => 'h3', 'h4' => 'h4', 'h5' => 'h5', ]; } /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode) { $elements = []; $tag = $this->getSetting('header'); foreach ($items as $delta => $item) { $elements[$delta] = [ '#type' => 'container', '#attributes' => [ 'class' => ['tab-item'], ], 'title' => [ '#type' => 'inline_template', '#template' => '{{ value|nl2br }}', '#context' => ['value' => $item->title], '#prefix' => '<' . $tag . ' class="tab-item__title">', '#suffix' => '</' . $tag . '>', ], 'value' => [ '#type' => 'processed_text', '#text' => $item->value, '#format' => $item->format, '#langcode' => $item->getLangcode(), '#prefix' => '<div class="tab-item__content">', '#suffix' => '</div>', ], ]; } return $elements; } }