amp-8.x-3.5/src/Plugin/Field/FieldFormatter/AmpMediaImageFormatter.php

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

namespace Drupal\amp\Plugin\Field\FieldFormatter;

use Drupal\amp\Plugin\Field\FieldFormatter\AmpImageFormatter;
use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
use Drupal\media\Entity\MediaType;
use Drupal\media\Plugin\media\Source\Image;

/**
 * Plugin for amp media image formatter.
 *
 * @FieldFormatter(
 *   id = "amp_media",
 *   label = @Translation("Amp Media Image"),
 *   description = @Translation("Display media as an AMP Image file."),
 *   field_types = {
 *     "entity_reference",
 *   }
 * )
 *
 * @see \Drupal\amp\Plugin\Field\FieldFormatter\AmpImageFormatter
 * @see \Drupal\media\Plugin\Field\FieldFormatter\MediaThumbnailFormatter
 */
class AmpMediaImageFormatter extends AmpImageFormatter {

  /**
   * {@inheritdoc}
   *
   * This has to be overriden because FileFormatterBase expects $item to be
   * of type \Drupal\file\Plugin\Field\FieldType\FileItem and calls
   * isDisplayed() which is not in FieldItemInterface.
   */
  protected function needsEntityLoad(EntityReferenceItem $item) {
    return !$item->hasNewEntity();
  }

  /**
   * {@inheritdoc}
   */
  protected function getEntitiesToView(EntityReferenceFieldItemListInterface $items, $langcode) {
    $media = parent::getEntitiesToView($items, $langcode);
    $entities = [];
    foreach ($media as $media_item) {
      $entity = $media_item->thumbnail->entity;
      $entity->_referringItem = $media_item->thumbnail;
      $entities[] = $entity;
    }
    return $entities;
  }

  /**
   * {@inheritdoc}
   */
  public static function isApplicable(FieldDefinitionInterface $field_definition) {

    $settings = $field_definition->getSettings();

    // This is an entity_reference that does not target media, this formatter
    // does not apply.
    if ($settings['target_type'] != 'media') {
      return FALSE;
    }

    // This field targets all media bundles, which might include images, this
    // formatter applies.
    if (empty($settings['handler_settings']) || empty($settings['handler_settings']['target_bundles'])) {
      return TRUE;
    }
    else {
      foreach ($settings['handler_settings']['target_bundles'] as $bundle) {
        $media_type = MediaType::load($bundle);

        // This field specifically targets bundles of the Image media type, this
        // formatter applies
        if ($media_type && $media_type->getSource() instanceof Image) {
          return TRUE;
        }
      }
    }

    // None of the above is true, this field targets non-image media, this
    // formatter does not apply.
    return FALSE;
  }

}

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

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