Drupal մոդուլում դաշտի տիպի ստեղծում
Դաշտի տիպերը սահմանում են դաշտերի հատկություններն ու վարքագիծը։ Դաշտի տիպերը սահմանվում են որպես 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 === ''; }
Դաշտի կարգավորումները
Դաշտի կարգավորումները թույլ են տալիս օգտագործողներին հարմարեցնել դաշտը իրենց պահանջներին համապատասխան։ Եթե դաշտն ունի կարգավորումներ, պետք է կատարել երեք քայլ՝
- Ավերագրել FieldItemBase::defaultFieldSettings()՝ լռելյայն արժեքներ սահմանելու համար
- Ստեղծել կոնֆիգուրացիոն սքիմա ձեր կարգավորումների համար
- Ստեղծել ֆորմ՝ օգտագործողներին թույլ տալու կարգավորումներ փոխելու
Քայլ 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.