View source
<?php
namespace Drupal\imagezoom\Plugin\Field\FieldFormatter;
use Drupal\image\Plugin\Field\FieldFormatter\ImageFormatterBase;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\imagezoom\Entity\ImageZoomOptions;
class ImageZoomFormatter extends ImageFormatterBase implements ContainerFactoryPluginInterface {
protected $moduleHandler;
public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, ModuleHandlerInterface $module_handler) {
parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
$this->moduleHandler = $module_handler;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($plugin_id, $plugin_definition, $configuration['field_definition'], $configuration['settings'], $configuration['label'], $configuration['view_mode'], $configuration['third_party_settings'], $container
->get('module_handler'));
}
public static function defaultSettings() {
return [
'imagezoom_options' => 'default',
] + parent::defaultSettings();
}
public function settingsForm(array $form, FormStateInterface $form_state) {
$element['imagezoom_options'] = [
'#type' => 'select',
'#title' => $this
->t('Options profile'),
'#options' => $this
->optionsProfiles(),
'#default_value' => $this
->getSetting('imagezoom_options'),
];
return $element;
}
public function settingsSummary() {
$profiles = $this
->optionsProfiles();
$summary[] = $this
->t('Zoom options: @profile', [
'@profile' => $profiles[$this
->getSetting('imagezoom_options')],
]);
return $summary;
}
public function viewElements(FieldItemListInterface $items, $langcode) {
$profile = ImageZoomOptions::load($this
->getSetting('imagezoom_options'));
$options = $profile
->getOptions();
$settings = [
'zoomType' => $options['zoom_type'],
];
if ($options['disable']) {
$settings['responsive'] = TRUE;
$settings['respond'] = [
[
'range' => '0 - ' . $options['disable_width'],
'enabled' => FALSE,
],
];
}
$this->moduleHandler
->alter('imagezoom_settings', $settings);
$elements = [];
foreach ($items as $delta => $item) {
$elements[$delta] = [
'#theme' => 'imagezoom_image',
'#item' => $item,
'#display_style' => $options['display_style'],
'#zoom_style' => $options['zoom_style'],
'#settings' => $settings,
];
}
$elements['#attached'] = [
'library' => [
'imagezoom/elevatezoom',
],
'drupalSettings' => [
'imagezoom' => $settings,
],
];
return $elements;
}
public function optionsProfiles() {
$profiles = ImageZoomOptions::loadMultiple();
$options = [];
foreach ($profiles as $name => $profile) {
$options[$name] = $profile
->label();
}
return $options;
}
}