sir_trevor-8.x-1.x-dev/src/Plugin/Field/FieldFormatter/SirTrevor.php

src/Plugin/Field/FieldFormatter/SirTrevor.php
<?php

namespace Drupal\sir_trevor\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\FieldItemListInterface;
use Drupal\sir_trevor\EventDispatchingDataProcessor;
use Drupal\text\Plugin\Field\FieldFormatter\TextDefaultFormatter;

/**
 * Plugin implementation of the 'text_default' formatter.
 *
 * @FieldFormatter(
 *   id = "sir_trevor",
 *   label = @Translation("Sir Trevor"),
 *   field_types = {
 *     "sir_trevor",
 *   }
 * )
 */
class SirTrevor extends TextDefaultFormatter {

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $decoded = json_decode($items->getString());

    // Return early if we can't decode the items.
    if (empty($decoded)) {
      return [];
    }

    $renderable = $this->itemsToRenderable($decoded);

    if (!empty($renderable)){
      foreach ($renderable as &$item) {
        $item['#entity'] = $items->getEntity();
      }
    }

    return $renderable;
  }


  /**
   * @param \stdClass $items
   * @return array
   */
  private function itemsToRenderable(\stdClass $items) {
    $renderable = [];

    if (empty($items) || empty($items->data)) {
      // Return early. this is an invalid item.
      return [];
    }

    $eventDispatcher = \Drupal::getContainer()->get('event_dispatcher');
    $eventDispatchingDataProcessor = new EventDispatchingDataProcessor($eventDispatcher);
    if (!empty($items->type)) {
      $renderable = [
        '#theme' => "sir_trevor_{$items->type}",
        '#data' => $eventDispatchingDataProcessor->processData($items->data),
      ];
    }
    else {
      foreach ($items->data as $items) {
        $renderable[] = $this->itemsToRenderable($items);
      }
    }

    return $renderable;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc