Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

9.10.2. Drupal Fields API: Դաշտերի ձևաչափիչ. ցուցադրել տվյալների դաշտերը էջում

19/04/2025, by Ivan

Menu

Այս հոդվածում կքննարկենք դաշտի ցուցադրման ձևավորիչները (Field Formatters), որոնք թույլ են տալիս խմբագրել դաշտերի ցուցադրումը և դրանք տեսանելի դարձնել էջում։

Նախորդ հոդվածներում մենք ստեղծել էինք Link դաշտի տիպ։ Այս հոդվածում կտեսնենք, թե ինչպես են այդ դաշտերը ցուցադրվում էջում և որ դասն է դրա համար պատասխանատու։

Յուրաքանչյուր դաշտ, որը դուք ավելացնում եք Drupal-ում, կարող է ցուցադրվել էջում և դրա կարգավորումները կարող եք փոխել Manage display էջում։

manage display

Format սյունակում կարող եք ընտրել, թե ինչպես պետք է դաշտը ցուցադրվի։ Այս սյունակը ձևավորվում է Field Formatter դասերի հիման վրա։ Եկեք դիտարկենք Link մոդուլի դասը, որը պատասխանատու է հղման ցուցադրման համար՝

core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php

Դասի վերնագրում նշվում է, թե որ դաշտի տիպին է պատկանում տվյալ ձևավորիչը։

/**
 * Plugin implementation of the 'link' formatter.
 *
 * @FieldFormatter(
 *   id = "link",
 *   label = @Translation("Link"),
 *   field_types = {
 *     "link"
 *   }
 * )
 */

Այս ֆայլում մեզ հիմնականում հետաքրքրում է viewElements() մեթոդը, որը պատասխանատու է տվյալների էջում արտածման համար։ Կարևոր է նկատել, որ ձևավորիչը հարցում չի ուղարկում տվյալների շտեմարան, այլ ստանում է տվյալները $items փոփոխականի միջոցով։ Այդ $items փոփոխականը պարունակում է արդեն վերամշակված տվյալները՝ բերված համապատասխան entity-ից։

Այսպիսով, մենք ունենք պատասխանատվության բաժանում՝ Field Widget-ը՝ տվյալների մուտքագրման համար, Field Storage-ը՝ տվյալների պահման համար, և Field Formatter-ը՝ տվյալների արտածման համար։

Սա շատ հարմար է քեշավորման տարբեր մակարդակների և տարբեր ֆունկցիոնալության ներդրման համար։ Օրինակ՝ եթե փոխվում է միայն դաշտի արտածման ձևը, ապա node-երի cache-ը վերատեղադրելու կարիք չկա, քանի որ տվյալները չեն փոխվել, փոխվել է միայն դրանց ցուցադրումը։

LinkFormatter դասը ունի նաև settingsForm() մեթոդ, որը պատասխանատու է Manage display էջում արտածման կարգավորումների ձևի համար։ Այս ձևում կարելի է ավելացնել կարգավորման դաշտեր Form API-ի միջոցով և պահպանել տվյալ կարգավորումները configuration-ում։

Link մոդուլում կա ևս մեկ ձևավորիչ՝

core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php

Այն ժառանգվում է LinkFormatter-ից, սակայն տարբերությունը այն է, որ այս ձևավորիչի համար միացված է առանձին տեմփլեյթ՝

core/modules/link/templates/link-formatter-link-separate.html.twig

Այսպիսով, դաշտի HTML արտածումը տեղի է ունենում twig տեմփլեյթի միջոցով։ Իսկ ձևավորիչը միայն կազմում է $element զանգվածը, որտեղ $delta-ի միջոցով գրվում են բազմակի արժեք ունեցող դաշտի յուրաքանչյուր արժեքի տվյալները։

Ինչպես տեսնում եք՝ Drupal-ի Field API-ն բավականին պարզ և հարմար է օգտագործման համար։ Հաջորդ հոդվածում մենք կգրենք մեր սեփական դաշտի տեսակ՝ իր Storage, Widget և Formatter-ով։