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

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

namespace Drupal\datafield\Plugin\DataField\FieldWidget;

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

/**
 * Plugin implementation of the 'string_textfield' widget.
 */
#[FieldWidget(
  id: 'textfield',
  label: new TranslatableMarkup('Textfield'),
  field_types: ['string', 'email'],
)]
class StringTextfieldWidget implements DataFieldWidgetInterface {
  use StringTranslationTrait;

  /**
   * {@inheritdoc}
   */
  public function getFormElement(&$element, $item = NULL, $setting = []) {
    if (!empty($element["#field_settings"]["list"])) {
      $idDatalist = $element['#field_name'] . '-' . $element['#machine_name'];
      $element['#type'] = 'textfield';
      $element['#attributes']['list'] = $idDatalist;
      $element['#attributes']['class'][] = 'datalistfield';
      $element['#attributes']['autocomplete'] = 'off';
      $element['#attached']['drupalSettings']['datalistfield'][$idDatalist] = $element["#field_settings"]["allowed_values"];
      $element['#attached']['library'][] = 'datafield/datalistfield';
    }
    $element['#maxlength'] = $setting['max_length'];
    $element['#attributes']['data-bs-toggle'] = 'tooltip';
    $element['#attributes']['data-bs-title'] = $element['#default_value'] ?? '';
    $element['#attributes']['title'] = $element['#default_value'] ?? '';
    if ($element['#type'] == 'range') {
      $element['#description'] = $element['#default_value'] . ' ';
      $element['#attached']['library'][] = 'datafield/tooltip';
    }
    $settings = $element["#widget_settings"];
    if (!empty($settings['class'])) {
      $element['value']['#attributes']['class'][] = $settings['class'];
      unset($settings['class']);
    }
    foreach ($settings as $attribute => $val) {
      if (!empty($val) && in_array($attribute, ['size', 'step', 'maxlength', 'placeholder'])) {
        $element['#' . $attribute] = $val;
      }
      elseif (!empty($val)) {
        $element['#attributes'][$attribute] = $val;
      }
    }

  }

  /**
   * {@inheritdoc}
   */
  public static function defaultSettings() {
    return [
      'type' => 'textfield',
      'placeholder' => t('Please type'),
      'separator' => '',
      'maxlength' => '',
      'pattern' => '',
      'class' => '',
      'size' => 30,
      'step' => '',
      'list' => '',
      'min' => '',
      'max' => '',
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, FormStateInterface $form_state) {
    $widget_settings = $form['#settings'];
    return [
      'type' => [
        '#type' => 'select',
        '#title' => $this->t('Type for input'),
        '#options' => [
          'textfield' => $this->t('Text'),
          'number' => $this->t('Number'),
          'range' => $this->t('Range number'),
          'search' => $this->t('Search'),
          'tel' => $this->t('Telephone'),
          'email' => $this->t('Email'),
          'url' => $this->t('Url'),
          'week' => $this->t('Week'),
          'month' => $this->t('Month'),
          'time' => $this->t('Time'),
          'date' => $this->t('Date'),
          'datetime-local' => $this->t('Datetime local'),
        ],
        '#default_value' => $widget_settings['type'],
      ],
      'maxlength' => [
        '#type' => 'number',
        '#title' => $this->t('Max length'),
        '#default_value' => $widget_settings['maxlength'] ?? self::defaultSettings()['maxlength'],
        '#min' => 1,
      ],
      'size' => [
        '#type' => 'number',
        '#title' => $this->t('Size'),
        '#default_value' => $widget_settings['size'] ?? self::defaultSettings()['size'],
        '#min' => 1,
      ],
      'placeholder' => [
        '#type' => 'textfield',
        '#title' => $this->t('Placeholder'),
        '#default_value' => $widget_settings['placeholder'] ?? self::defaultSettings()['placeholder'],
      ],
      'pattern' => [
        '#type' => 'textfield',
        '#title' => $this->t('Regex pattern for input'),
        '#default_value' => $widget_settings['pattern'] ?? self::defaultSettings()['pattern'],
      ],
      'step' => [
        '#type' => 'textfield',
        '#title' => $this->t('Step'),
        '#default_value' => $widget_settings['step'] ?? self::defaultSettings()['step'],
      ],
      'min' => [
        '#type' => 'number',
        '#title' => $this->t('Min'),
        '#default_value' => $widget_settings['min'] ?? self::defaultSettings()['min'],
      ],
      'max' => [
        '#type' => 'number',
        '#title' => $this->t('Max'),
        '#default_value' => $widget_settings['max'] ?? self::defaultSettings()['max'],
      ],
      'list' => [
        '#type' => 'textfield',
        '#title' => $this->t('List for datalist'),
        '#default_value' => $widget_settings['list'] ?? self::defaultSettings()['list'],
      ],
      'class' => [
        '#type' => 'textfield',
        '#title' => $this->t('Custom class'),
        '#default_value' => $widget_settings['class'] ?? self::defaultSettings()['class'],
      ],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function settingsSummary($settings = []) {
    $summary = [];
    $settings += self::defaultSettings();
    $summary[] = $this->t('Size: @size', ['@size' => $settings['size']]);
    return $summary;
  }

}

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

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