logo

Լրացուցիչ Բլոկների Տեսակներ (EBT) - Դասավորության Կառուցողի նոր փորձառություն❗

Լրացուցիչ Բլոկների Տեսակներ (EBT) - ձևավորված, կարգավորելի բլոկների տեսակներ՝ սլայդշոուներ, ներդիրներ, քարտեր, բացվող ցանկեր և շատ ուրիշներ։ Ներառված կարգավորումներ՝ ֆոնի, DOM տուփի, JavaScript փլագինների համար։ Փորձեք դասավորությունների կառուցման ապագան արդեն այսօր։

EBT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EBT մոդուլները

❗Լրացուցիչ Պարբերությունների Տեսակներ (EPT) - Պարբերությունների նոր փորձառություն

Լրացուցիչ պարբերության տեսակներ (EPT) - անալոգիական պարբերության վրա հիմնված մոդուլների հավաքակազմ։

EPT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EPT մոդուլները

Scroll
20/06/2025, by Ivan

Menu

Դաշտի տիպերը սահմանում են դաշտերի հատկություններն ու վարքագիծը։ Դաշտի տիպերը սահմանվում են որպես plugin-ներ, ուստի խորհուրդ է տրվում ծանոթանալ plugin API-ին նախքան նոր դաշտի տիպի ստեղծումը։

Drupal 8-ում դաշտի տիպ ստեղծելու համար անհրաժեշտ է դաս, որի վրա առկա է FieldType անոտացիա։

Դասի տեղադրումը պետք է լինի MODULE_NAME/src/Plugin/Field/FieldType, օրինակ՝ /modules/foo/src/Plugin/Field/FieldType/BazItem.php։

Դասի անունների տարածքը պետք է լինի Drupal\MODULE_NAME\Plugin\Field\FieldType։

<?php

namespace Drupal\MODULE_NAME\Plugin\Field\FieldType;

Դասի վերևում դրված անոտացիան պետք է պարունակի եզակի ID, լեյբլ, լռելյայն ֆորմատոր և լռելյայն վիջեթ։ Լռելյայն ֆորմատորը համարժեք է դաշտի ֆորմատորի դասի անոտացիայի id-ին։

/**
 * Provides a field type of baz.
 * 
 * @FieldType(
 *   id = "baz",
 *   label = @Translation("Baz field"),
 *   default_formatter = "baz_formatter",
 *   default_widget = "baz_widget",
 * )
 */

Դասը պետք է իրագործի FieldItemInterface ինտերֆեյսը և սովորաբար ժառանգում է FieldItemBase դասը՝ ինտերֆեյսի ընդհանուր իրագործման համար։

class BazItem extends FieldItemBase {

}

FieldItemInterface::schema() մեթոդը պետք է ավերագրել՝ համակարգին հայտնելու, թե ինչպես պահպանել դաշտի արժեքները։

/**
 * {@inheritdoc}
 */
public static function schema(FieldStorageDefinitionInterface $field_definition) {
  return [
    // columns պարունակում է այն արժեքները, որոնք դաշտը կպահպանի
    'columns' => [
      // Ցուցակ դաշտի պահվող արժեքների. այս դաշտը պահպանում է միայն մեկ արժեք՝ 'value'
      'value' => [
        'type' => 'text',
        'size' => 'tiny',
        'not null' => FALSE,
      ],
    ],
  ];
}

Այս մեթոդը վերադարձնում է API սքիմայի սյուների բնութագրերի զանգված։

FieldItemInterface::propertyDefinitions() մեթոդը հայտնում է համակարգին դաշտի հատկությունների մասին ավելի մանրամասն տվյալներ։

/**
 * {@inheritdoc}
 */
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
  $properties = [];
  $properties['value'] = DataDefinition::create('string');

  return $properties;
}

Map::isEmpty() մեթոդը (որը նախնին է FieldItemBase-ին) պետք է ավերագրել՝ համակարգին հայտնելու, թե երբ է դաշտը դատվում որպես դատարկ։

/**
 * {@inheritdoc}
 */
public function isEmpty() {
  $value = $this->get('value')->getValue();
  return $value === NULL || $value === '';
}

Դաշտի կարգավորումները

Դաշտի կարգավորումները թույլ են տալիս օգտագործողներին հարմարեցնել դաշտը իրենց պահանջներին համապատասխան։ Եթե դաշտն ունի կարգավորումներ, պետք է կատարել երեք քայլ՝

  1. Ավերագրել FieldItemBase::defaultFieldSettings()՝ լռելյայն արժեքներ սահմանելու համար
  2. Ստեղծել կոնֆիգուրացիոն սքիմա ձեր կարգավորումների համար
  3. Ստեղծել ֆորմ՝ օգտագործողներին թույլ տալու կարգավորումներ փոխելու

Քայլ 1․ Ավերագրել FieldItemBase::defaultFieldSettings()

/**
 * {@inheritdoc}
 */
public static function defaultFieldSettings() {
  return [
    // Սահմանել 'size' կարգավորումը լռելյայն արժեքով՝ 'large'
    'size' => 'large',
  ] + parent::defaultFieldSettings();
}

Քայլ 2․ Ստեղծել կոնֆիգուրացիոն սքիմա ձեր կարգավորումների համար

Սքիման տեղադրվում է հետևյալ ֆայլում՝

[MODULE ROOT]/config/schema/[MODULE_NAME].schema.yml

Այստեղ նկարագրեք այն կարգավորումների տիպերը, որոնք ստեղծել եք defaultFieldSettings()-ում։

Քայլ 1-ում ստեղծվեց «size» անունով տեքստային կարգավորում, որի սքիման՝

field.field_settings.[FIELD ID]:
  type: mapping
  label: 'FIELDNAME կարգավորումներ'
  mapping:
    size:
      type: string
      label: 'Չափս'

Քայլ 3․ Ստեղծել ֆորմ՝ օգտագործողներին թույլ տալու կարգավորումներ փոխելու

Կարգավորումների արժեքների փոփոխման ֆորմը ստեղծվում է՝ ավերագրելով FieldItemBase::fieldSettingsForm() մեթոդը։

/**
 * {@inheritdoc}
 */
public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
  
  $element = [];
  // էլեմենտի բանալին պետք է համապատասխանի կարգավորման անվան
  $element['size'] = [
    '#title' => $this->t('Size'),
    '#type' => 'select',
    '#options' => [
      'small' => $this->t('Small'),
      'medium' => $this->t('Medium'),
      'large' => $this->t('Large'),
    ],
    '#default_value' => $this->getSetting('size'),
  ];

  return $element;
}

Իրական օրինակ

RgbItem դասը field_example մոդուլից Օրինակի նախագծից՝

namespace Drupal\field_example\Plugin\Field\FieldType;

use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\TypedData\DataDefinition;

/**
 * 'field_example_rgb' դաշտի տիպի plugin իրականացում։
 *
 * @FieldType(
 *   id = "field_example_rgb",
 *   label = @Translation("Օրինակ՝ RGB գույն"),
 *   module = "field_example",
 *   description = @Translation("Ցուցադրում է RGB գույնը կազմող դաշտ։"),
 *   default_widget = "field_example_text",
 *   default_formatter = "field_example_simple_text"
 * )
 */
class RgbItem extends FieldItemBase {

  /**
   * {@inheritdoc}
   */
  public static function schema(FieldStorageDefinitionInterface $field_definition) {
    return [
      'columns' => [
        'value' => [
          'type' => 'text',
          'size' => 'tiny',
          'not null' => FALSE,
        ],
      ],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function isEmpty() {
    $value = $this->get('value')->getValue();
    return $value === NULL || $value === '';
  }

  /**
   * {@inheritdoc}
   */
  public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
    $properties['value'] = DataDefinition::create('string')
      ->setLabel(t('Hex value'));

    return $properties;
  }

}

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.