openfed-8.x-8.5/modules/openfed_features/openfed_svg_file/src/Plugin/Field/FieldFormatter/OpenfedSvgFileFormatter.php

modules/openfed_features/openfed_svg_file/src/Plugin/Field/FieldFormatter/OpenfedSvgFileFormatter.php
<?php

namespace Drupal\openfed_svg_file\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\file\Plugin\Field\FieldFormatter\FileFormatterBase;

/**
 * Plugin implementation of the 'openfed_svg_file' formatter.
 *
 * @FieldFormatter(
 *   id = "openfed_svg_file_formatter",
 *   label = @Translation("Openfed SVG file Formatter"),
 *   field_types = {
 *     "openfed_svg_file"
 *   }
 * )
 */
class OpenfedSvgFileFormatter extends FileFormatterBase {

  /**
   * {@inheritdoc}
   */
  public static function defaultSettings() {
    return parent::defaultSettings();
  }

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, FormStateInterface $form_state) {
    $form = parent::settingsForm($form, $form_state);

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function settingsSummary() {
    $summary = [];

    return $summary;
  }

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

    foreach ($items as $delta => $item) {
      if ($item->entity) {
        $type = $item->type;
        $svg_data = '';

        $attributes['width'] = $item->width;
        $attributes['height'] = $item->height;
        if ($item->alt && $type != 'object') {
          $attributes['alt'] = $item->alt;
        }
        if ($item->title) {
          $attributes['title'] = $item->title;
        }
        $uri = $item->entity->getFileUri();

        if ($type == 'inline') {
          $svg_data = NULL;
          $svg_file = file_exists($uri) ? file_get_contents($uri) : NULL;
          if ($svg_file) {
            $dom = new \DomDocument();
            libxml_use_internal_errors(TRUE);
            $dom->loadXML($svg_file);
            if (isset($dom->documentElement)) {
              $dom->documentElement->setAttribute('height', $attributes['height']);
              $dom->documentElement->setAttribute('width', $attributes['width']);
            }
            $svg_data = $dom->C14N();
          }
        }

        $elements[$delta] = [
          '#theme' => 'openfed_svg_file__' . $type,
          '#attributes' => $attributes,
          '#uri' => ($type == 'inline') ? NULL : $uri,
          '#alt_text' => ($type == 'object') ? $item->alt : NULL,
          '#svg_data' => ($type == 'inline') ? $svg_data : NULL,
        ];
      }
    }

    return $elements;
  }


}

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

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