logo

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

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

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

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

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

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

Scroll

Entity API-ն իրականացնում է Typed Data API-ն

18/06/2025, by Ivan

Համարժեք բարելավում

  • Entity API-ն այժմ իրականացնում է Typed Data API-ն։

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

Drupal-ի տվյալների մոդելի հասկացում

Առաջինը, նախքան խորը ուսումնասիրենք Typed Data API-ն, պետք է հասկանանք, թե ինչպես է նախկինում ընկալվում Drupal-ի տվյալների մոդելը (Entity API)։ Սա կարևոր է, քանի որ հենց այստեղից է առաջացել Typed Data API-ն, իսկ Entity API-ն հանդիսանում է այն համակարգերից մեկը, որոնց համար այն մշակվել է։

Էնտիթին մեկ բարդ տվյալների մասը է, որը բաղկացած է այլ տվյալների մասերից, ինչպիսիք են դաշտերը՝ էլեմենտների ցանկով։ Դաշտի էլեմենտն էլ բարդ է՝ բաղկացած է ավելի փոքր տվյալների կտորներից, օրինակ՝ տեքստային արժեք և մուտքի ֆորմատ։ Սակայն բարդությունը հասնում է այնպիսի մակարդակի, որ ինչ-որ բան կարելի է նկարագրել որպես պարզ տիպի տվյալ, օրինակ՝ տող կամ ամբողջ թիվ։

Պարզեցված օրինակ Drupal 7-ից (լեզվի կոդ չկա, քանի որ Drupal 8-ը դա այլ կերպ է անում)

Օրինակ 1

// Էնտիթիները բարդ են, պարունակում են այլ տվյալների կտորներ։
$entity;

// Դաշտերը բարդ չեն, դրանք պարունակում են միայն էլեմենտների ցանկ։
$entity->image;

// Էլեմենտները բարդ են, պարունակում են այլ տվյալների կտորներ, թարգմանելի են և հասանելի (ունեն թույլտվություններ)։
$entity->image[0];

// Ֆայլի ID-ն պարզ ամբողջ թիվ է։
$entity->image[0]['fid'];

// Alternative տեքստը պարզ տող է։
$entity->image[0]['alt'];

Ամբողջացնում ենք միասին

Ստորև ներկայացված է պարզեցված օրինակ, թե ինչպես է Entity API-ն իրականացնում ինտերֆեյսները, բացի Typed Data API-ից։ Իրականում Entity API-ն ընդլայնում է այդ ինտերֆեյսները՝ ավելացնելով լրացուցիչ մեթոդներ, որոնք անհրաժեշտ են Entity API-ին։ Այնուամենայնիվ, ստորև նշված բոլոր հայտարարությունները ճշմարիտ են․

Օրինակ 2

// Էնտիթիները բարդ են։
$entity instanceof ComplexDataInterface;

// Հատկությունները բարդ չեն, դրանք միայն էլեմենտների ցանկ են։
$entity->get('image') instanceof ListInterface;

// Էլեմենտները բարդ են։
$entity->get('image')->offsetGet(0) instanceof ComplexDataInterface;

// Typed Data օբյեկտը, որը ներկայացնում է alt արժեքը։
$entity->get('image')->offsetGet(0)->get('alt') instanceof TypedDataInterface;

// alt արժեքը պարզ տող է։
is_string($entity->get('image')->offsetGet(0)->get('alt')->getValue());

Ստորև ամփոփվում է, թե ինչպես է Entity API-ն ընդլայնում Typed Data API-ն՝ որոշ լրացուցիչ պահանջների համար․

Օրինակ 3

interface EntityInterface extends ComplexDataInterface, TranslatableInterface, AccessibleInterface {
 // ...
}

interface FielditemListInterface extends ListInterface {
 // ...
}

// Ուշադրություն դարձրեք, որ սա ընդլայնում է երկու ինտերֆեյս։ Ներքևում բացատրություն կա։
interface FieldItemInterface extends ComplexDataInterface, TypedDataInterface {
 // ...
}

// Ստորև ներկայացված են իրական իրականացումներ։

// Ստացած է մի абստրակտ դաս, որն ունի ընդհանուր լոգիկա։
class ImageItem extends FieldItemBase {
 // ...
}

// Ստացած է մի абստրակտ դաս, որն ունի ընդհանուր լոգիկա։
class String extends TypedData {
 // ...
}

[Հաջորդ երկու պարբերակները պահանջում են լրացուցիչ աշխատանք]

Երկու ամենանշանակալիները վերևում՝

1. EntityInterface-ն ընդլայնում է որոշ ծառայողական ինտերֆեյսներ, ինչպիսիք են թարգմանությունն ու մուտքի թույլտվությունները։ Դա պետք է բավականին պարզ լինի։
2. FieldItemInterface-ը ընդլայնում է ինչպես ComplexDataInterface-ը, այնպես էլ TypedDataInterface-ը։ Ինչպես նշվել է, էլեմենտները բարդ են, քանի որ պարունակում են ավելի փոքր տվյալների կտորներ (օրինակ՝ տեքստային արժեք և ձևաչափ)։ Բայց միևնույն ժամանակ էլեմենտը ինքնին նաև Typed Data-ի մաս է, ուստի ունի իր սեփական սահմանումը և տիպը։

Այսպիսով, ամփոփելով՝ ի լրումն Օրինակ 2-ի, ստորև նշված բոլոր հայտարարությունները նույնպես ճշմարիտ են․

Օրինակ 4

$entity instanceof EntityInterface;

$entity->get('image') instanceof FieldItemListInterface;

$entity->get('image')->offsetGet(0) instanceof FieldItemInterface;

$entity->get('image')->offsetGet(0)->get('alt') instanceof String;

is_string($entity->get('image')->offsetGet(0)->get('alt')->getValue());

API-ի օգտագործում

[Այս բաժնում պետք են լրացուցիչ օրինակներ]

Entity API-ն սահմանում է որոշ կախարդական մեթոդներ, ինչպիսիք են __get(), որպեսզի ապահովի դաշտի արժեքներին արագ և հեշտ մուտք։ Այսպիսով, API-ի օգտագործումը շատ պարզ է, և շարադրանքը նման է Drupal 8-ից առաջվա ժամանակներին։

Ներքևում ներկայացված է՝ ինչպես կարելի է ստանալ պատկերին առընթեր alternative տեքստի իրական արժեքը՝

Օրինակ 5

// Ամենաամբողջական ձևը։
$string = $entity->get('image')->offsetGet(0)->get('alt')->getValue();

// Entity API-ի հավելված կախարդանքով։
$string = $entity->image[0]->alt;

// Entity API-ի ավելի շատ կախարդանքով, որը վերցնում է առաջին էլեմենտը
// լռելյայն ցուցակից։
$string = $entity->image->alt;

Վերևի օրինակն ավելացնում է միայն հարմար շարադրանք հին API-ին։ Ստորև ներկայացված օրինակները ցույց են տալիս, թե որտեղ է այս API-ի իրական արժեքը՝ տվյալների ստուգումն է․

Օրինակ 6

// Վերադարձնում է դաշտերի անուններով զանգված բոլոր դաշտերի և նրանց սահմանումների համար։ Օրինակ՝ ‘image’ դաշտը։
$property_definitions = $entity->getFieldDefinitions();

// Վերադարձնում է հատկությունների անուններով զանգված, օրինակ՝ ‘file_id’ և ‘alt’ հատկությունների համար։
$property_definitions = $entity->image
  ->getFieldDefinition()
  ->getFieldStorageDefinition()
  ->getPropertyDefinitions();

// Վերադարձնում է միայն ‘alt’ property's սահմանումը։
$string_definition = $entity->image
  ->getFieldDefinition()
  ->getFieldStorageDefinition()
  ->getPropertyDefinition('alt');

Վերոնշյալ սահմանումների հիման վրա այժմ կարող ենք կատարել խելացի գործողություններ, ինչպիսիք են սերիալիզացիան կամ տվյալների այլ զանգվածի պատրաստումը։ Մենք նաև կարող ենք տրամադրել այդ տվյալները սեմանտիկորեն հարուստ API-ներով, ինչպես JSON-LD endpoint-ը, որպեսզի այլ համակարգերը հասկանան մեր տվյալների հիմքերը։

Տեսեք Https://drupal.org/node/2078241 լրացուցիչ տեղեկությունների և օրինակների համար՝ թե ինչպես սահմանել և օգտագործել էնտիթի դաշտերի սահմանումները։

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.