htools-8.x-1.x-dev/src/Plugin/Field/FieldFormatter/SlickAsNavForFormatter.php

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


namespace Drupal\htools\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\slick\Plugin\Field\FieldFormatter\SlickEntityFormatterBase;
use Drupal\slick\SlickDefault;

/**
 * Plugin implementation of the 'Slick Entity Reference' formatter.
 *
 * @FieldFormatter(
 *   id = "slick_asnavfor",
 *   label = @Translation("Slick AsNavFor"),
 *   description = @Translation("Display the vanilla entity reference/entity
 *   reference revision as a Slick carousel."), field_types = {
 *     "entity_reference",
 *     "entity_reference_revisions"
 *   }
 * )
 */
class SlickAsNavForFormatter extends SlickEntityFormatterBase {

  /**
   * {@inheritdoc}
   */
  public static function defaultSettings() {
    $settings = SlickDefault::baseSettings();
    $settings['view_mode'] = '';

    $settings['main'] = SlickDefault::baseSettings();
    $settings['main']['view_mode'] = '';

    $settings['pager'] = SlickDefault::baseSettings();
    $settings['pager']['view_mode'] = '';

    return $settings;
  }

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, FormStateInterface $form_state) {
    $element = [
      'main' => [
        '#type' => 'details',
        '#title' => 'Main',
      ],
      'pager' => [
        '#type' => 'details',
        '#title' => 'pager',
      ],
    ];
    $definition = $this->getScopedFormElements();

    $definition['_views'] = isset($form['field_api_classes']);


    $this->admin()->buildSettingsForm($element['main'], $definition);
    $this->admin()->buildSettingsForm($element['pager'], $definition);

    foreach ($definition["settings"]["main"] as $key => $value) {
      $element['main'][$key]['#default_value'] = $value;
    }
    foreach ($definition["settings"]["pager"] as $key => $value) {
      $element['pager'][$key]['#default_value'] = $value;
    }

    return $element;
  }

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $entities = $this->getEntitiesToView($items, $langcode);

    // Early opt-out if the field is empty.
    if (empty($entities)) {
      return [];
    }

    // Collects specific settings to this formatter.
    $widget_settings = $this->getSettings();
    $settings_main = $widget_settings['main'];
    $settings_pager = $widget_settings['pager'];

    // Asks for Blazy to deal with iFrames, and mobile-optimized lazy loading.
    $settings['blazy'] = TRUE;
    $settings['plugin_id'] = $this->getPluginId();
    $settings['vanilla'] = TRUE;
    $settings['view_mode'] = $settings_main['view_mode'];
    $settings['nav'] = TRUE;
    $settings['optionset'] = $settings_main['optionset'];
    $settings['optionset_thumbnail'] = $settings_pager['optionset'];
    $settings['skin_thumbnail'] = $settings_pager['skin'];
    $settings['navpos'] = TRUE;
    $build = ['settings' => $settings];

    $this->formatter->buildSettings($build, $items);
    $build['settings']['nav'] = TRUE;
    // Build the elements.
    $this->buildElements($build, $entities, $langcode);
    $build['thumb']['settings'] = $widget_settings['pager'];
    $build['thumb']['items'] = $build['items'];
    foreach ($build['thumb']['items'] as $key => $item) {
      $entity = $entities[$key];
      $build['thumb']['items'][$key] = $this->manager()
        ->getEntityTypeManager()
        ->getViewBuilder($entity->getEntityTypeId())
        ->view($entity, $widget_settings['pager']['view_mode'], $langcode);
      $this->manager()
        ->getRenderer()
        ->addCacheableDependency($build['thumb']['items'][$key], $entity);
    }
    return $this->manager()->build($build);
  }

}

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

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