ex_icons-8.x-1.0/src/Plugin/Field/FieldType/ExIconItem.php

src/Plugin/Field/FieldType/ExIconItem.php
<?php

namespace Drupal\ex_icons\Plugin\Field\FieldType;

use Drupal\Component\Utility\Random;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Field\Plugin\Field\FieldType\StringItemBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\TypedData\DataDefinition;

/**
 * Plugin implementation of the 'ex_icon' field type.
 *
 * @FieldType(
 *   id = "ex_icon",
 *   label = @Translation("Icon"),
 *   description = @Translation("This field stores an icon choice."),
 *   category = "general",
 *   default_widget = "ex_icon_select",
 *   default_formatter = "ex_icon_default",
 * )
 */
class ExIconItem extends StringItemBase {

  /**
   * {@inheritdoc}
   */
  public static function defaultFieldSettings() {
    return [
      'title' => DRUPAL_OPTIONAL,
    ] + parent::defaultFieldSettings();
  }

  /**
   * {@inheritdoc}
   */
  public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
    $properties['value'] = DataDefinition::create('string')
      ->setLabel(t('Icon ID'))
      ->addConstraint('Length', ['max' => 127])
      ->setRequired(TRUE);

    $properties['title'] = DataDefinition::create('string')
      ->setLabel(t('Text alternative'))
      ->addConstraint('Length', ['max' => 255]);

    return $properties;
  }

  /**
   * {@inheritdoc}
   */
  public static function schema(FieldStorageDefinitionInterface $field_definition) {
    return [
      'columns' => [
        'value' => [
          'description' => 'Icon ID.',
          'type' => 'varchar',
          'length' => 127,
        ],
        'title' => [
          'description' => 'Text alternative of the icon.',
          'type' => 'varchar',
          'length' => 255,
        ],
      ],
      'indexes' => [
        'value' => [['value', 20]],
      ],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public static function mainPropertyName() {
    return 'value';
  }

  /**
   * {@inheritdoc}
   */
  public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
    $options = \Drupal::service('ex_icons.manager')->getIconOptions();
    $settings = $field_definition->getSettings();

    $values['value'] = array_rand(array_keys($options));
    $values['title'] = $settings['title'] ? (new Random())->word(mt_rand(1, 255)) : '';

    return $values;
  }

  /**
   * {@inheritdoc}
   */
  public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
    $element = [];

    $element['title'] = [
      '#type' => 'radios',
      '#title' => $this->t('Allow text alternative'),
      '#default_value' => $this->getSetting('title'),
      '#options' => [
        DRUPAL_DISABLED => $this->t('Disabled'),
        DRUPAL_OPTIONAL => $this->t('Optional'),
        DRUPAL_REQUIRED => $this->t('Required'),
      ],
    ];

    return $element;
  }

}

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

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