contacts_events-8.x-1.x-dev/src/Plugin/Field/FieldFormatter/AgeFormatter.php

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

namespace Drupal\contacts_events\Plugin\Field\FieldFormatter;

use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FormatterBase;

/**
 * Formats datetime as age calculated against start of event.
 *
 * @FieldFormatter(
 *   id = "datetime_age",
 *   label = @Translation("Age at event"),
 *   field_types = {
 *     "datetime"
 *   }
 * )
 */
class AgeFormatter extends FormatterBase {

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = [];

    /** @var \Drupal\contacts_events\Entity\TicketInterface $entity */
    $entity = $items->getEntity();
    $event = $entity->getEvent();
    /** @var \Drupal\Core\Datetime\DrupalDateTime $event_start */
    $event_start = $event->get('date')->start_date ?? new DrupalDateTime();

    foreach ($items as $delta => $item) {
      if ($item->value) {
        $elements[$delta] = [
          '#markup' => $item->date->diff($event_start)->y,
        ];
      }
    }

    return $elements;
  }

  /**
   * {@inheritdoc}
   */
  public static function isApplicable(FieldDefinitionInterface $field_definition) {
    return $field_definition->getTargetEntityTypeId() == 'contacts_ticket'
      && $field_definition->getFieldStorageDefinition()->getCardinality() == 1;
  }

}

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

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