9.10.1. Drupal Fields API: Դաշտի վիջեթ. տվյալների մուտքագրման դաշտեր, դաշտի ձև:
Այս ձեռնարկում կծանոթանանք, թե ինչպես է աշխատում Link մոդուլի Field Widget-ը։ Սա վերանայման հոդված է, այնպես որ եթե ցանկանում եք սկսել գրել ձեր սեփական Field Widget-ը, կարող եք անցնել հաջորդ հոդվածներին։
Նախորդ դասում մենք ավելացրինք Link դաշտեր նոդերի և բլոկների համար։ Հիմա եկեք տեսնենք, թե ինչի հիման վրա է կազմվում Link դաշտի ձևը։
Մենք արդեն ծանոթացել ենք Drupal-ում PHP դասերի ավտոլցման համակարգին, և դաշտերի համար գոյություն ունի նաև WidgetBase կոչվող հիմնական դաս՝
core/lib/Drupal/Core/Field/WidgetBase.php
Երբ մոդուլում ստեղծում եք նոր դաս՝ ժառանգված WidgetBase-ից և տեղադրում եք այն src/Plugin/Field/FieldWidget
պանակում, դասը ավտոմատ կերպով միացվում է և կարող է օգտագործվել դաշտի համար։ Եկեք դիտարկենք Link դաշտի widget-ի դասը՝
core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
Դասի վերնագրում նշվում է, թե որ դաշտի տիպի համար է նախատեսված տվյալ widget-ը՝
/**
* Plugin implementation of the 'link' widget.
*
* @FieldWidget(
* id = "link_default",
* label = @Translation("Link"),
* field_types = {
* "link"
* }
* )
*/
Այս ձևով հնարավոր է ստեղծել նոր դաշտային widget-ներ՝ գոյություն ունեցող դաշտերի համար՝ custom մոդուլների միջոցով։
Հիմա դիտարկենք formElement()
մեթոդը, որը հիմնական մեթոդներից մեկն է widget-ում։ Այստեղ Form API-ի միջոցով ավելացվում են ձևի տարրերը։ Link widget-ում կան երեք հիմնական տարրեր՝
$element['title']
$element['uri']
$element['attributes']
Այս դաշտերը հետո օգտագործվում են node կամ block ձևերում տվյալների մուտքագրման համար։ Դաշտերի վրա նաև ավելացվում են վավերացման պայմաններ, օրինակ՝ URI դաշտը պետք է պարունակի վավեր URL կամ կայքի ներքին հղում։
Մեկ այլ կարևոր մեթոդ է settingsForm()
մեթոդը։ Այն պատասխանատու է դաշտի կարգավորումների ձևի համար, որը երևում է "Manage form display" էջում՝
Մնացած մեթոդները Field Widget-ում պարտադիր չեն։ Մենք այստեղ չենք անդրադառնա բոլոր մեթոդներին, քանի որ դրանք անհրաժեշտ չեն սովորական custom մոդուլ գրելու համար։ Եթե ցանկանաք գրել contribute մոդուլներ, վստահ եմ՝ չեք դժվարանա կարդալ հիմնական դասի մեթոդների նկարագրությունները՝
core/lib/Drupal/Core/Field/WidgetBase.php
Դաշտերի բոլոր widgets-ները կարգավորվում են "Manage form display" էջից՝ յուրաքանչյուր bundle-ի համար առանձին՝