logo

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

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

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

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

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

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

Scroll
19/06/2025, by Ivan

Drupal 8 ներառում է YAML կոնֆիգուրացիոն ֆայլերի համար նախատեսված Kwalify-ի (http://www.kuwata-lab.com/kwalify/) կողմից ստեղծված սխեմայի/մետատվյալների լեզվի աջակցություն: Ինքնին Kwalify-ն գրված է Ruby լեզվով, և մեզ անհրաժեշտ էին փոքր փոփոխություններ ֆորմատում, ուստի Kwalify-ի բոլոր մանրամասները անմիջապես չեն կիրառվում, սակայն շատ մոտ են դրան:

Շապիկ

Արագ ըմբռնման և հարմար օրինակների համար դիտեք այս շապիկը, ապա շարունակեք կարդալ, եթե դեռ հարցեր ունեք՝

ConfigSchemaCheatSheet1.5Thumb

/sites/default/files/config-schema-cheat-sheet1.5.pdf

Ներդրման օրինակ

System մոդուլը ունի երկու կոնֆիգուրացիոն պարամետրեր՝ կապված սպասարկման ռեժիմի հետ (կայքը հասանելի է կամ ոչ սովորական այցելուների համար):

<?php
$config = \Drupal::config('system.maintenance');
$message = $config->get('message');
$langcode = $config->get('langcode');
?>

(Թե սպասարկումը ակտիվ է, պահվում է state system համակարգում, ոչ թե կոնֆիգուրացիայում):

Այս կոնֆիգուրացիայի նորմալ արժեքները պահվում են core/modules/system/config/install/system.maintenance.yml ֆայլում՝ հետևյալ ձևով՝

message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.'
langcode: en

Յուրաքանչյուր մոդուլ կարող է ունենալ անհրաժեշտության դեպքում բազմաթիվ կոնֆիգուրացիոն օբյեկտներ։ Սրանք բոլորը բացատրվում են մեկ կամ ավելի սխեմայի ֆայլերում, որոնք առաքվում են մոդուլի հետ։ System մոդուլի դեպքում ֆայլերը գտնվում են core/modules/system/config/schema. system.schema.yml ֆայլի համապատասխան հատվածը տեսեք ստորև՝

system.maintenance:
  type: config_object
  label: 'Maintenance mode'
  mapping:
    message:
      type: text
      label: 'Message to display when in maintenance mode'

Ֆայլի վերին մակարդակի բանալին ("system.maintenance") համապատասխանում է .yml ֆայլի հիմնական անունին ("system.maintenance.yml") և կոնֆիգուրացիայի օբյեկտի անվանմանը (config('system.maintenance')). Ներքևի մակարդակները նկարագրում են ֆայլի պարունակությունը։ Կոնֆիգուրացիայի սխեման սահմանում է երկու տեսակի ֆայլեր՝ config_object գլոբալ կոնֆիգուրացիայի ֆայլերի համար և config_entity՝ էնթիթիների համար։ config_object տեսակը սահմանված է core.data_types.schema.yml ֆայլում՝ հետևյալ կերպ՝

# Root of a configuration object.

_core_config_info:
  type: mapping
  mapping:
    default_config_hash:
      type: string
      label: 'Default configuration hash'

config_object:
  type: mapping
  mapping:
    langcode:
      type: string
      label: 'Language code'
    _core:
      type: _core_config_info

Mapping (ներդրված տիպ) հանդիսանում է բանալի-արժեք զույգերի հիմնական տիպ։ config_object տեսակը կրկնակի օգտագործում է langcode և _core բանալիները և ավելացնում է ևս մեկ բանալի՝ message-ի համար։ system.maintenance-ի սխեմայի նշանն (label)՝ «Maintenance mode», նկարագրում է սխեմայի բովանդակությունը։ Հետո փաստացի տարրերը նկարագրված են mapping բանալիի ներքո, որտեղ message բանալին սահմանվում է՝ ժառանգելով langcode և _core բանալիները։ Յուրաքանչյուր տարր ունի type և label, որոնք համապատասխանաբար նկարագրում են տվյալների տիպն ու նրանց նկարագրությունը։ Label-ը սովորաբար համարվում է նույնը կամ մոտավորապես նման է կոնֆիգուրացիոն ձևի label-ին, որտեղ արժեքը կարող է խմբագրվել համակարգի ադմինիստրատորի կողմից։

Բոլոր դեպքերում, որոնք աջակցվում են Drupal-ի կողմից, .yml ֆայլի վերին մակարդակի տարրը պետք է լինի mapping (տպավորություն)՝ ներառյալ ստորև նկարագրված բանալիներով։ Դուք պետք է օգտագործեք նշված երկու ենթատեսակներից որևէ մեկը՝ config_object կամ config_entity։ Տարբեր տարրերը կարող են ունենալ ցանկացած տիպ՝ կախված տվյալների նկարագրությունից։ _core բանալին և դրա բոլոր ենթաբանալները պահվում են Drupal-ի միջուկի կողմից։

Ինչի՞ համար են սխեմայի ֆայլերը

1. Գլխավոր օգտագործման դեպքերը ներկայացվել են բազմալեզու աջակցության համար։ Հնարավոր է գտնել բոլոր թարգմանվող տեքստերը, որոնք առկա են կոնֆիգուրացիայում, որպեսզի ձեր մոդուլի կամ թեմայի տեղադրման հետ միասին դրանց համար առաջարկվեն թարգմանություններ https://localize.drupal.org կայքում։ Այս օգտագործման դեպքում բավական է միայն սխեմայի մակարդակները և տիպերը։

2. Սխեմաները օգտագործվում են նաև տվյալների հիման վրա ստեղծվող թարգմանական ձևեր տրամադրելու համար։ Այս դեպքում տիպերը կարևոր են, իսկ label-ները պետք է ճշգրիտ լինեն։ Կոնֆիգուրացիայի թարգմանության մոդուլը օգտագործում է սխեմաները՝ թարգմանական ձևերի ստեղծման և թարգմանությունների պահպանման համար։ Հիմնական թարգմանվող տիպերը «label» են (մեկ տող տեքստ) և «text» (բազմալայն տեքստ):

3. Սխեմաները օգտագործվում են նաև կոնֆիգուրացիայի օբյեկտների ինքնավար պահպանության համար։ Դրա համար անհրաժեշտ է կոնֆիգուրացիայի օբյեկտի սխեմա, որպեսզի ճիշտ արտահանվեն տիպավորված հատկությունները։ Եթե դուք չեք ցանկանում տրամադրել սխեմա, անհրաժեշտ է իրագործել toArray() մեթոդը կոնֆիգուրացիայի էնթիթիում՝ պահպանման համար։

4. Սխեմաները ապահովում են ավտոմատ տիպավորում՝ երաշխավորելով, որ կոնֆիգուրացիայի արժեքները պահվում են ճիշտ տիպերով։ Սա կարևոր է, որպեսզի տարբերակների վերահաշվարկը ցույց տա միայն իսկական փոփոխությունները։

5. PHPUnit-ում Բոլոր TestBase դասեր սահմանում են խիստ սխեմայի հետևում։ Եթե սխեման բացակայում է կամ սխալ է, կհայտնվեն սխալներ։ Եթե հարկավոր է, կարող եք թուլացնել ստուգումը՝ սահմանելով՝

protected $strictConfigSchema = FALSE;

Դիտեք https://drupal.org/project/config_inspector մոդուլը, որն օգնում է սխեմաներն ստուգել։ Այն օգնում է գտնել բացակա սխեմաներ և սխեմայի տարրեր՝ տարբեր ներկայացումներով:

Կան նաև այլ հնարավորություններ սխեմաների օգտագործման համար, օրինակ՝ վեբսերվիսների ինտերֆեյսների ստեղծում, և հնարավոր է, որ հետագայում հայտնվեն նոր օգտագործման դեպքեր:

Հատկություններ

  • type՝ արժեքի տիպ, կարող է լինել հիմնական կամ ժառանգված տիպ։
  • label՝ UI-ում ցուցադրվող անվանում, կարող է տարբերվել կոնֆիգուրացիոն ձևի անվանումից, բայց ավելի լավ է համընկնում ունենա։
  • translatable՝ տիպի թարգմանելիություն, օրինակ՝
type: label

ինչպես կարճակյաց է նույնը, ինչ՝

type: string
translatable: true
  • nullable՝ հնարավոր է, որ արժեքը դատարկ լինի։
  • class՝ օգտագործվում է հիմնական տիպերի համար՝ կոդի վերլուծության դասի համար։
  • Տիպին հատուկ հատկություններ՝

          - mapping՝ mapping տիպի արժեքների համար, որտեղ բանալիներն ու արժեքների տիպերը պետք է սահմանվեն սխեմայում։ Mapping-ում բանալիները միայն տեքստային են։
          - sequence՝ sequence տիպի արժեքների համար, որտեղ բանալիները կարող են լինել թվեր կամ տեքստ, բայց նշանակություն չունեն։

Մետատվյալների տիպերը

Նախապես սահմանված հիմնական տիպերն ու մի քանի բարդ տիպեր կարելի է գտնել core.data_types.schema.yml-ում՝

# Undefined type used by the system to assign to elements at any level where
# configuration schema is not defined. Using explicitly has the same effect as
# not defining schema, so there is no point in doing that.
undefined:
  label: 'Undefined'
  class: '\Drupal\Core\Config\Schema\Undefined'

# Explicit type to use when no data typing is possible. Instead of using this
# type, we strongly suggest you use configuration structures that can be
# described with other structural elements of schema, and describe your schema
# with those elements.
ignore:
  label: 'Ignore'
  class: '\Drupal\Core\Config\Schema\Ignore'

# Basic scalar data types from typed data.
boolean:
  label: 'Boolean'
  class: '\Drupal\Core\TypedData\Plugin\DataType\BooleanData'
email:
  label: 'Email'
  class: '\Drupal\Core\TypedData\Plugin\DataType\Email'
integer:
  label: 'Integer'
  class: '\Drupal\Core\TypedData\Plugin\DataType\IntegerData'
float:
  label: 'Float'
  class: '\Drupal\Core\TypedData\Plugin\DataType\FloatData'
string:
  label: 'String'
  class: '\Drupal\Core\TypedData\Plugin\DataType\StringData'
uri:
  label: 'Uri'
  class: '\Drupal\Core\TypedData\Plugin\DataType\Uri'

Ինչպես երևում է, հիմնական տիպերի մեծամասնությունը համապատասխանում է TypedData API-ի համապատասխան տիպերին։ Սա ցույց է տալիս նաև, թե ինչպես կարող եք հեշտությամբ սահմանել ձեր սեփական տիպերը՝ պարզապես ստեղծելով համապատասխան դաս։ Մնացած երկու բարդ տիպերը սահմանված են համապատասխան դասերի հիման վրա՝

# Container data types for lists with known and unknown keys.
mapping:
  label: Mapping
  class: '\Drupal\Core\Config\Schema\Mapping'
  definition_class: '\Drupal\Core\TypedData\MapDataDefinition'
sequence:
  label: Sequence
  class: '\Drupal\Core\Config\Schema\Sequence'
  definition_class: '\Drupal\Core\TypedData\ListDataDefinition'

Mapping-ը, ինչպես ցույց է տրված, բանալի-արժեք զույգերի ( ասոցատիվ զանգվածի ) տիպ է, որտեղ յուրաքանչյուր տարր կարող է ունենալ տարբեր տիպ, իսկ Sequence-ը՝ ինդեքսավորված զանգված է, որտեղ տարրերը ունեն նույն տիպը, և բանալիներն նշանակություն չունեն։ Sequence-ում բանալիները կարող են լինել տեքստային։

Մնացած տիպերը, ներառյալ system.maintenance-ն, ժառանգում են մյուս տիպերից, օրինակ՝ label, path, text, date_format, color_hex, որոնք սահմանված են որպես տողեր, բայց տարբերակում են տեքստային տիպերը տարբեր նպատակների համար։

# Human readable string that must be plain text and editable with a text field.
label:
  type: string
  label: 'Label'
  translatable: true

# Internal Drupal path
path:
  type: string
  label: 'Path'

# Human readable string that can contain multiple lines of text or HTML.
text:
  type: string
  label: 'Text'
  translatable: true

# PHP Date format string that is translatable.
date_format:
  type: string
  label: 'Date format'
  translatable: true
  translation context: 'PHP date format'

# HTML color value.
color_hex:
  type: string
  label: 'Color'

Ուշադրություն դարձրեք, որ label, text և date_format տիպերը նշված են որպես թարգմանելի։ Սա նշանակում է, որ հիմնական ինտերֆեյսի թարգմանության մոդուլը դրանք որոնում և թարգմանում է տվյալների բազայի կամ համայնքի կողմից տրամադրված թարգմանություններով, ստեղծելով թարգմանության վերաուղղման ֆայլեր։ Թարգմանելի տեքստերը կարող են ունենալ թարգմանության համատեքստ՝ ինչպես ցույց է տրված date_format-ի համար, որպեսզի թարգմանողները գիտակցեն, որ օրինակ «Y»-ը PHP ամսաթվի ֆորմատ է, ոչ թե այո։

Այդպես կարելի է նաև վերաօգտագործվող բարդ տիպեր սահմանել հիմնական տիպերի վրա, ինչպես տեսանք սպասարկման ռեժիմի օրինակով՝

# Mail text with subject and body parts.
mail:
  type: mapping
  label: 'Mail'
  mapping:
    subject:
      type: label
      label: 'Subject'
    body:
      type: text
      label: 'Body'

Սա թույլ է տալիս ունենալ mail տիպ՝ էլ․ փոստի թեմայի և մարմնի համար, որը կարող է օգտագործվել այլ տեղ։ Օրինակ user.schema.yml-ում՝

user.mail:
 type: config_object
 label: 'Email settings'
 mapping:
  cancel_confirm:
    type: mail
    label: 'Account cancellation confirmation'
  password_reset:
    type: mail
    label: 'Password recovery'
  [....]

Վերջում նշենք ևս երկու կարևոր բարդ տիպ՝ config_object և config_entity, որոնք սահմանված են core.data_types.schema.yml-ում՝

config_object:
  type: mapping
  mapping:
    langcode:
      type: string
      label: 'Language code'
    _core:
      type: _core_config_info

config_entity:
  type: mapping
  mapping:
    uuid:
      type: string
      label: 'UUID'
    langcode:
      type: string
      label: 'Language code'
    status:
      type: boolean
      label: 'Status'
    dependencies:
      type: config_dependencies
      label: 'Dependencies'
    third_party_settings:
      type: sequence
      label: 'Third party settings'
      sequence:
        type: '[%parent.%parent.%type].third_party.[%key]'
    _core:
      type: _core_config_info

Դինամիկ տիպերի հղումներ

Ինչպես նշվեց վերևում, նույնիսկ պարզ տիպերը հիմնականում հղումներ են, իսկ բարդ տիպերը՝ օրինակ mail-ը, օգտագործվում են որպես վերանվանված տիպեր։ Որոշ դեպքերում տիպը կախված է տվյալներից, օրինակ պատկերների ոճերի դեպքում, որտեղ տարբեր էֆեկտներ կարող են կիրառվել, կամ view-ների դեպքում՝ տարբեր պլագիններով։ Դրա համար հնարավոր է տիպերը սահմանել տվյալների բանալիների միջոցով։

Տիպի փոփոխական արժեքները պետք է լինեն [] ներքո, և հնարավոր է համակցել որոշ գիտելիքներ։ Տիպային հղումների երեք տեսակ կա՝

1. Տարրի բանալիի հղում՝ օրինակ type: book.[%key], որտեղ %key-ն փոխարինվում է տարրի բանալով։
2. Ներառված բանալիի հղում՝ օրինակ type: 'views.field.[table]-[field]', որտեղ տիպը հաշվարկվում է հիման վրա table և field բանալիների։
3. Մայր բանալիի հղում՝ օրինակ type: 'views.display.[%parent.display_plugin]', որտեղ parent-ի display_plugin բանալին օգտագործվում է տիպը որոշելու համար։

Օրինակ պատկերների ոճերից՝ core/modules/image/config/install/image.style.medium.yml, որը ունի այս կառուցվածքը՝

name: medium
label: 'Medium (220x220)'
effects:
  bddf0d06-42f9-4c75-a700-a33cafa25ea0:
    id: image_scale
    data:
      width: 220
      height: 220
      upscale: true
    weight: 0
    uuid: bddf0d06-42f9-4c75-a700-a33cafa25ea0
langcode: en

Այստեղ effects բանալիի կառուցվածքը կախված է id էֆեկտի տիպից։ Այդ պատճառով տիպը տվյալների վրա է հիմնված և չի կարող լինել ստատիկ։ Այս սխեմայի համապատասխան մասը՝ image.schema.yml ֆայլում է՝

image.style.*:
  type: config_entity
  label: 'Image style'
  mapping:
    name:
      type: string
    label:
      type: label
      label: 'Label'
    effects:
      type: sequence
      sequence:
        type: mapping
        mapping:
          id:
            type: string
          data:
            type: image.effect.[%parent.id]
          weight:
            type: integer
          uuid:
            type: string

Սա նկարագրում է բոլոր պատկերների ոճերի մետատվյալները՝ անուններ, նշաններ և էֆեկտների բանալիներ։ Հետևաբար effects-ը հաջորդականություն է, որտեղ յուրաքանչյուր տարր՝ մապինգ է՝ id, data, weight, uuid բանալիներով։ data-ն կախված է id-ից, որը դրված է տվյալ էֆեկտի մեջ։ Այդպիսով, image.effect.image_scale տիպը վավեր է տվյալների համար։

Նշենք, որ նաև կարելի է հանդիպել sequence-ի այլ ձևաչափի, որտեղ sequence-ի տարրերի տիպը սահմանված է որպես միակ տարրերի ցուցակ։ Այս ձևաչափը հնացած է և կհանվի Drupal 9-ում՝

deprecated.sequence.definition.format:
  type: sequence
  sequence:
    - type: string
      label: 'DO NOT COPY, THIS IS DEPRECATED'

Ձեր սխեմայի ֆայլերի անունները

Ձեր սխեմայի ֆայլերը պետք է ունենան գլոբալ եզակի անուն։ Եթե ձեր սխեմայի ֆայլի անունը համընկնի այլ հավելման ֆայլի անվան հետ, մեկ կամ երկու սխեմաները չեն բեռնվի, ինչը կհանգեցնի բարդ սխալների։ Հետևաբար խորհուրդ է տրվում սխեմայի ֆայլերի անուններին ավելացնել մոդուլի անվան պրեֆիքս։

Կոդի ոճը սխեմայի ֆայլերում

Պարզապես հետևեք .yml ֆայլերի կոդավորման ընդհանուր ոճին Drupal միջուկում։ Ստորև նշված կարևոր կետերն են՝

  • Ներկայացրեք վերին մակարդակի մեկնաբանություն, որը բացատրում է ֆայլի բովանդակությունը։ Եթե ունեք մեկ սխեմայի ֆայլ ամբողջ մոդուլի համար, բավական է օրինակ՝ # Schema for the configuration files of the Contact module։
  • Խուսափեք ավելորդ մեկնաբանություններից, որոնք չեն ավելացնում հստակություն։
  • Մի օգտագործեք երկկողմանի ստորակետներ (կամ՝ դյուալ չակերտներ) տողերի համար, օգտագործեք միայն միակողմանի ստորակետներ՝ համազորության համար։
  • Մետա տեքստի արժեքների համար նույնպես օգտագործեք միակողմանի ստորակետներ, նույնիսկ եթե դրանք մեկ բառ են։
  • Բանալիների անունների և տիպերի համար չկիրառեք չակերտներ (դրանք միշտ տեքստ են, և չպետք է բացատներ ունենան)։
  • ՅAML-ում թվային արժեքները, որոնք պահվում են կոնֆիգուրացիոն ֆայլերում, ավտոմատ կերպով վերածվում են տեքստի և պահվում միակողմանի ստորակետերով։
  • Անհրաժեշտության դեպքում ավելացրեք label-ներ՝ թարգմանելի արժեքների և նրանց պարունակող կոնտեյներների համար։
  • Շարունակեք ճիշտ ինդենտացիան՝ քանի որ YAML-ում դա կարևոր է ճիշտ կառուցվածքի համար։

Նշում. Կոնֆիգուրացիայի տվյալների .yml ֆայլերի կոդավորման ստանդարտը պահանջում է օգտագործել միակողմանի ստորակետներ միայն այն ժամանակ, երբ օգտագործվում է ավելի քան մեկ բառ, ինչը հեշտացնում է կոնֆիգուրացիայի փոփոխումը։ Սխեմաների ֆայլերի առաջարկները տարբերվում են, քանի որ դրանք ձեռքով են գրվում, ուստի խորհուրդ է տրվում միշտ օգտագործել ստորակետներ՝ label արժեքների համար։

PHP API

Կոնֆիգուրացիայի մետատվյալները ստանալու համար կարող եք օգտագործել \Drupal::service('config.typed') ֆունկցիան, օրինակ system.maintenance-ի համար՝

$definition = \Drupal::service('config.typed')->getDefinition('system.maintenance');

Արդյունքում ստացված զանգվածի կառուցվածքը հետևյալն է՝

array(5) {
  ["label"]=>
  string(16) "Maintenance mode"
  ["class"]=>
  string(34) "\Drupal\Core\Config\Schema\Mapping"
  ["definition_class"]=>
  string(40) "\Drupal\Core\TypedData\MapDataDefinition"
  ["mapping"]=>
  array(2) {
    ["langcode"]=>
    array(2) {
      ["type"]=>
      string(6) "string"
      ["label"]=>
      string(13) "Language code"
    }
    ["message"]=>
    array(2) {
      ["type"]=>
      string(4) "text"
      ["label"]=>
      string(43) "Message to display when in maintenance mode"
    }
  }
  ["type"]=>
  string(18) "system.maintenance"
}

Մի քիչ բարդ օրինակ՝ image.style.medium-ի առաջին էֆեկտի տիպավորված տվյալները ստանալու համար, ինչպես նշվեց վերևում՝

// Get typed configuration from under the the image.style.medium config 
// key's effects children. Take the uuid key shown above in the example config
// file (corresponding to the first effect in the style) and the data children's elements.
$effects = \Drupal::service('config.typed')->get('image.style.medium')->get('effects.bddf0d06-42f9-4c75-a700-a33cafa25ea0.data')->getDataDefinition();

Արդյունքում ստացվում է image.effect.image_scale տիպը, ինչպես նկարագրված է վերևում, և վերադարձվում է քարտեզի բնութագրում, օրինակ՝

object(Drupal\Core\TypedData\MapDataDefinition)#1061 (3) {
  ["mainPropertyName":protected]=>
  NULL
  ["propertyDefinitions":protected]=>
  NULL
  ["definition":protected]=>
  array(5) {
    ["type"]=>
    string(24) "image.effect.image_scale"
    ["label"]=>
    string(11) "Image scale"
    ["class"]=>
    string(34) "\Drupal\Core\Config\Schema\Mapping"
    ["definition_class"]=>
    string(40) "\Drupal\Core\TypedData\MapDataDefinition"
    ["mapping"]=>
    array(3) {
      ["width"]=>
      array(2) {
        ["type"]=>
        string(7) "integer"
        ["label"]=>
        string(5) "Width"
      }
      ["height"]=>
      array(2) {
        ["type"]=>
        string(7) "integer"
        ["label"]=>
        string(6) "Height"
      }
      ["upscale"]=>
      array(2) {
        ["type"]=>
        string(7) "boolean"
        ["label"]=>
        string(7) "Upscale"
      }
    }
  }
}

TypedData API-ն ամբողջությամբ կարող է օգտագործվել տարրերի հետ՝

// Get the effects sequence object from the medium image style.
$effects = \Drupal::service('config.typed')->get('image.style.medium')->get('effects');
// $effects represents the sequence keyed by uuids as shown above in the parent reference
// example. Use the getValue() TypedData method to retrieve the value.
$first_uuid = key($effects->getValue());
// Take the data keys for this first effect.
$data = $effects->get($first_uuid)->get('data');
// Examine values and types for width.
$data->get('width')->getPluginId(); // will return 'integer'
$data->get('width')->getValue(); // will return 220 

Տեսեք ավելի շատ օրինակներ կոնֆիգուրացիայի սխեմայով նավարկելու և ձևերի գեներացման համար՝ https://drupal.org/project/config_inspector

Ձեր սխեմայի ստուգում

Կոնֆիգուրացիայի ինսպեկտորի մոդուլը տրամադրում է UI սխեմաները համեմատելու և տեսնելու, թե ինչպես ձևերի գեներացիան աշխատում է տվյալների հետ։ Սա կարող է օգնել սխեմայի խնդիրների գտնումին։ Դիտեք https://drupal.org/node/1910624#comment-7088154՝ խորհրդատվության համար։

Կոնֆիգուրացիայի հիմնական թարգմանության մոդուլը իրական UI է ստեղծում սխեմաների վրա և թույլ է տալիս թարգմանել կոնֆիգուրացիան։ Կարող եք օգտագործել այն ստուգելու համար՝ արդյոք ձեր կոնֆիգուրացիան ճիշտ թարգմանվում է և թարգմանությունները ճիշտ տեղերում են հայտնվում։

Լրացուցիչ ռեսուրսներ

Դիտեք #1866610՝ Kwalify-ի ոճով սխեմայի ձևաչափի ներդնում, #1648930՝ կոնֆիգուրացիայի սխեմայի ներդնում և օգտագործում թարգմանության համար և #1914366՝ բոլոր կոնֆիգուրացիայի սխեմայի ֆայլերը schemas ենթաթողարկում։ Դրանք պատմում են այս սխեմայի ձևաչափի պատմությունը և զարգացումը։ Դիտեք նաև #1905152՝ կոնֆիգուրացիայի սխեմայի ինտեգրում՝ տեղական մոդուլի հետ և #1952394՝ կոնֆիգուրացիայի թարգմանության միջուկային մոդուլ։

#1602106՝ Դեֆոլտ կոնֆիգուրացիոն ֆայլերի փաստաթղթավորում՝ կոնֆիգուրացիայի YAML ֆայլերի կանոնների սկզբնավորման մասին։

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.