datafield-1.x-dev/src/Plugin/DataField/FieldWidget/SelectWidget.php

src/Plugin/DataField/FieldWidget/SelectWidget.php
<?php

namespace Drupal\datafield\Plugin\DataField\FieldWidget;

use Drupal\Core\Field\Attribute\FieldWidget;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\datafield\Plugin\DataFieldWidgetInterface;

/**
 * Plugin implementation of the 'Language' widget.
 */
#[FieldWidget(
  id: 'select',
  label: new TranslatableMarkup('Select'),
  field_types: ['string', 'integer', 'numeric', 'float'],
)]
class SelectWidget implements DataFieldWidgetInterface {
  use StringTranslationTrait;

  /**
   * {@inheritdoc}
   */
  public function getFormElement(&$element, $item = NULL, $setting = []) {
    self::setOptions($element, $setting);
  }

  /**
   * {@inheritdoc}
   */
  public static function setOptions(&$element, $setting) {
    $element['#empty_option'] = t('- Select a value -');
    if (!empty($element["#field_settings"]['list']) && !empty($element["#field_settings"]['allowed_values'])) {
      if (is_string($element["#field_settings"]['allowed_values'])) {
        $element["#field_settings"]['allowed_values'] = static::extractAllowedValues($element["#field_settings"]['allowed_values']);
      }
      $element['#options'] = $element["#field_settings"]['allowed_values'];
    }
  }

  /**
   * Extracts the allowed values array from the allowed_values element.
   *
   * @param string $string
   *   The raw string to extract values from.
   *
   * @return array
   *   The array of extracted key/value pairs.
   *
   * @see \Drupal\options\Plugin\Field\FieldType\ListTextItem::extractAllowedValues()
   */
  protected static function extractAllowedValues(string $string): array {
    return array_reduce(
      array_filter(array_map('trim', explode(PHP_EOL, $string))),
      function ($values, $text) {
        if (preg_match('/(.*)\|(.*)/', $text, $matches)) {
          $key = trim($matches[1]);
          $value = trim($matches[2]);
        }
        else {
          $key = $value = $text;
        }
        $values[$key] = $value;
        return $values;
      },
      []
    );
  }

}

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

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