elevate_image_zoom-9.1.x-dev/src/Plugin/Field/FieldFormatter/ElevateImageZoomFormatter.php

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

/**
 * @file
 * Contains \Drupal\elevate_image_zoom\Plugin\Field\FieldFormatter\ElevateImageZoomFormatter.
 */

namespace Drupal\elevate_image_zoom\Plugin\Field\FieldFormatter;

use Drupal\core\field\FieldItemListInterface;
use Drupal\image\Plugin\Field\FieldFormatter\ImageFormatter;
use Drupal\Core\Form\FormStateInterface;

/**
 * Plugin implementation of the 'elevate_image_zoom_formatter' formatter.
 *
 * @FieldFormatter(
 *   id = "elevate_image_zoom_formatter",
 *   label = @Translation("Elevate Image Zoom"),
 *   field_types = {
 *     "image"
 *   }
 * )
 */

class ElevateImageZoomFormatter extends ImageFormatter {

  /**
   * {@inheritdoc}
   */
  public static function defaultSettings() {
    return [
      'image_style' => '',
      'elevate_zoom_image_style' => '',
      'elevate_zoom_type' => 'basic_zoom',
      'elevate_shadow_color' => '#000000',
      'elevate_window_position' => 1,
      'elevate_window_width' => 500,
      'elevate_window_height' => 500,
      'elevate_lens_size' => 100,
      'elevate_thumbnail' => 'thumbnail',
    ];
  }

  /**
   * Setting form for field formatter.
   */
  public function settingsForm(array $form, FormStateInterface $form_state) {
    $element = parent::settingsForm($form, $form_state);
    unset($element['image_link']);
    $element['elevate_zoom_image_style'] = [
      '#type' => 'select',
      '#title' => $this->t('Elevate Image Zoom Style'),
      '#default_value' => $this->getSetting('elevate_zoom_image_style'),
      '#empty_option' => $this->t('None (original image)'),
      '#options' => image_style_options(FALSE),
    ];
    $element['elevate_thumbnail'] = [
      '#type' => 'select',
      '#title' => $this->t('Image Thumbnail Style'),
      '#default_value' => $this->getSetting('elevate_thumbnail'),
      '#empty_option' => $this->t('None (original image)'),
      '#options' => image_style_options(FALSE),
    ];
    $element['elevate_zoom_type'] = [
      '#type' => 'select',
      '#title' => $this->t('Zoom Type'),
      '#description' => $this->t('Select what type of zoom effect you would like.'),
      '#default_value' => $this->getSetting('elevate_zoom_type'),
      '#options' => [
        'basic_zoom' => $this->t('Basic Zoom'),
        'tint_zoom' => $this->t('Tint Zoom'),
        'inner_zoom' => $this->t('Inner Zoom'),
        'lens_zoom' => $this->t('Lens Zoom'),
        'mousewheel_zoom' => $this->t('Mousewheel Zoom'),
      ],
    ];
    $element['elevate_shadow_color'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Overlay color'),
      '#description' => $this->t('Shadow color. default value is #000000.'),
      '#default_value' => $this->getSetting('elevate_shadow_color'),
      '#size' => 10,
      '#maxlength' => 15,
      '#required' => TRUE,
    ];
    $element['elevate_window_position'] = [
      '#type' => 'number',
      '#title' => $this->t('Zoom position'),
      '#description' => $this->t('Zoomed image popup position clock wise, Range 1 to 16.'),
      '#default_value' => $this->getSetting('elevate_window_position'),
      '#size' => 10,
      '#min' => 1,
      '#max' => 16,
      '#required' => TRUE,
    ];
    $element['elevate_window_width'] = [
      '#type' => 'number',
      '#title' => $this->t('Zoom window width'),
      '#description' => $this->t('Zoomed window width, Range 100 to 1000.'),
      '#default_value' => $this->getSetting('elevate_window_width'),
      '#size' => 10,
      '#min' => 100,
      '#max' => 1000,
      '#required' => TRUE,
    ];
    $element['elevate_window_height'] = [
      '#type' => 'number',
      '#title' => $this->t('Zoom window height'),
      '#description' => $this->t('Zoomed window width, Range 100 to 1000.'),
      '#default_value' => $this->getSetting('elevate_window_height'),
      '#size' => 10,
      '#min' => 100,
      '#max' => 1000,
      '#required' => TRUE,
    ];
    $element['elevate_lens_size'] = [
      '#type' => 'number',
      '#title' => $this->t('Zoom lens size'),
      '#description' => $this->t('Lens size, Range 100 to 300.'),
      '#default_value' => $this->getSetting('elevate_lens_size'),
      '#size' => 10,
      '#min' => 100,
      '#max' => 300,
      '#required' => TRUE,
    ];
    return $element;
  }

  /**
   * Summery for field formatter.
   */
  public function settingsSummary() {
    $summary = [];
    $image_styles = image_style_options(FALSE);
    $style = 'Original image';
    if (isset($image_styles[$this->getSetting('image_style')])) {
      $style = $image_styles[$this->getSetting('image_style')];
    }
    $zoom_image_style = 'Original image';
    if (isset($image_styles[$this->getSetting('elevate_zoom_image_style')])) {
      $zoom_image_style = $image_styles[$this->getSetting('elevate_zoom_image_style')];
    }
    $summary[] = $this->t('Image style: @style', [
      '@style' => $style,
    ]);
    $summary[] = $this->t('Zoom image style: @zoom_image_style', [
      '@zoom_image_style' => $zoom_image_style,
    ]);
    $summary[] = $this->t('Zoom type: @zoom_type', [
      '@zoom_type' => $this->getSetting('elevate_zoom_type'),
    ]);
    return $summary;
  }

  /**
   * View element hook.
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = [];
    /** @var \Drupal\Core\Field\EntityReferenceFieldItemListInterface $items */
    if (empty($images = $this->getEntitiesToView($items, $langcode))) {
      return $elements;
    }
    else {
      $image_style_setting = $this->imageStyleStorage->load($this->getSetting('image_style'));
      $zoom_image_style = $this->imageStyleStorage->load($this->getSetting('elevate_zoom_image_style'));
      $image_style_thumbnail = $this->imageStyleStorage->load($this->getSetting('elevate_thumbnail'));
      $file_url_service = \Drupal::service('file_url_generator');

      foreach ($images as $delta => $image) {
        $image_uri = $image->getFileUri();
        $image_alt = $image->_referringItem->alt;
        $zoom_image_url = $zoom_image_style ? $zoom_image_style->buildUrl($image_uri) : $file_url_service->generateAbsoluteString($image_uri);
        $zoom_image_url = $file_url_service->transformRelative($zoom_image_url);
        $image_url = $image_style_setting ? $image_style_setting->buildUrl($image_uri) : $file_url_service->generateAbsoluteString($image_uri);
        $image_url = $file_url_service->transformRelative($image_url);
        $thumbnail_image_url = $image_style_thumbnail ? $image_style_thumbnail->buildUrl($image_uri) : $file_url_service->generateAbsoluteString($image_uri);
        $thumbnail_image_url = $file_url_service->transformRelative($thumbnail_image_url);
        $images_array[$delta]['images_url'] = $image_url;
        $images_array[$delta]['images_alt'] = $image_alt;
        $images_array[$delta]['zoom_image_url'] = $zoom_image_url;
        $images_array[$delta]['thumbnail'] = $thumbnail_image_url;
        $classes = 'elevate_zoom--' . $this->getSetting('elevate_zoom_type');
      }
      if (count($images_array) > 1) {
        $classes .= '_gallery';
        $has_gallery = 'yes';
      }
      else {
        $has_gallery = 'no';
      }
      $elements = [
        '#theme' => 'elevate_image_zoom_template',
        '#elevate_images' => $images_array,
        '#elevate_class' => $classes,
        '#elevate_has_gallery' => $has_gallery,
      ];
      $elements['#attached']['library'][] = 'elevate_image_zoom/elevate_image_zoom_js';
      $elements['#attached']['drupalSettings']['elevate_tint_shadow_color'] = $this->getSetting('elevate_shadow_color');
      $elements['#attached']['drupalSettings']['elevate_window_position'] = $this->getSetting('elevate_window_position');
      $elements['#attached']['drupalSettings']['elevate_window_width'] = $this->getSetting('elevate_window_width');
      $elements['#attached']['drupalSettings']['elevate_window_height'] = $this->getSetting('elevate_window_height');
      $elements['#attached']['drupalSettings']['elevate_lens_size'] = $this->getSetting('elevate_lens_size');
      return $elements;
    }
  }

}

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

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