eav_field-2.x-dev/src/Plugin/Field/FieldFormatter/EavFormatter.php

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

namespace Drupal\eav_field\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\Attribute\FieldFormatter;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FormatterBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\eav_field\Plugin\Field\FieldType\EavItemListInterface;

#[FieldFormatter(
  id: 'eav_formatter',
  label: new TranslatableMarkup('Boolean'),
  field_types: ['eav'],
)]
class EavFormatter extends FormatterBase {

  /**
   * {@inheritdoc}
   */
  public static function defaultSettings(): array {
    return [
      'only_primary' => FALSE,
      'show_empty' => FALSE,
    ];
  }

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

    $form['only_primary'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Show only primary attributes'),
      '#default_value' => $this->getSetting('only_primary'),
    ];

    $form['show_empty'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Show empty field'),
      '#default_value' => $this->getSetting('show_empty'),
    ];

    return $form;
  }

  /**
   * {@inheritDoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode): array {
    /** @var EavItemListInterface $items */

    $elements = [
      '#is_multiple' => FALSE,
    ];

    $formatter_settings = $this->getSettings();

    if ($items->count() > 0 || $formatter_settings['show_empty']) {
      $elements[0] = [
        '#theme' => 'eav_list',
        '#values' => $items->referencedEntities(),
        '#host_entity' => $items->getEntity(),
        '#field_name' => $items->getName(),
        '#only_primary' => $formatter_settings['only_primary'],
        '#context' => [
          'entity' => $items->getEntity(),
          'view_mode' => $this->viewMode,
          'field_name' => $items->getName(),
        ],
      ];
    }

    return $elements;
  }

}

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

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