bynder-4.0.0-beta1/modules/bynder_select2/src/Plugin/Field/FieldWidget/BynderSelect2SimpleWidget.php

modules/bynder_select2/src/Plugin/Field/FieldWidget/BynderSelect2SimpleWidget.php
<?php

namespace Drupal\bynder_select2\Plugin\Field\FieldWidget;

use Drupal\Component\Utility\Html;
use Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsSelectWidget;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Field\FieldItemListInterface;

/**
 * Plugin implementation of the 'bynder_select2_simple_widget' widget.
 *
 * @FieldWidget(
 *   id = "bynder_select2_simple_widget",
 *   label = @Translation("Bynder select2"),
 *   field_types = {
 *     "list_string",
 *     "list_integer"
 *   },
 *   multiple_values = TRUE
 * )
 */
class BynderSelect2SimpleWidget extends OptionsSelectWidget {

  /**
   * {@inheritdoc}
   */
  public function formElement(
    FieldItemListInterface $items,
    $delta,
    array $element,
    array &$form,
    FormStateInterface $form_state
  ) {
    $element = parent::formElement(
      $items,
      $delta,
      $element,
      $form,
      $form_state
    );

    $field_name = $this->fieldDefinition->getFieldStorageDefinition()->getName(
    );

    $element += [
      '#type' => 'bynder_select2_simple_element',
      '#options' => $this->getOptions($items->getEntity()),
      '#default_value' => $this->getSelectedOptions($items),
      // Do not display a 'multiple' select box if there is only one option.
      '#placeholder' => $this->getSetting('placeholder'),
      '#multiple' => $this->multiple && count($this->options) > 1,
    ];

    if (isset($element['#options']['_none'])) {
      $element['#options'] = ['' => ''] + $element['#options'];
      unset($element['#options']['_none']);
    }

    $class = 'bynder-select2-' . hash(
        'md5',
        Html::getUniqueId('bynder-select2-' . $field_name)
      );

    $select2_settings = [
      'selector' => '.' . $class,
      'field_name' => $field_name,
      'settings' => $this->getSettings(),
      'placeholder_text' => $element['#placeholder'],
    ];

    $element['#attached']['drupalSettings']['bynder_select2'][$class] = $select2_settings;
    $element['#attributes']['class'][] = $class;
    $element['#attached']['library'][] = 'bynder_select2/bynder_select2.widget';

    return $element;
  }

}

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

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