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.11. Drupal Entity API: Ստեղծեք ձեր սեփական Entity տեսակը: Ստեղծեք Entity տեսակ՝ օգտագործելով Drupal Console-ը:

19/04/2025, by Ivan

Menu

Մենք արդեն ուսումնասիրել ենք Form API-ն, Fields API-ն և գիտենք, թե ինչպես է տվյալները Drupal-ում պահվում տվյալների բազայում։ Այժմ անդրադառնանք բոլոր Drupal կայքերի հիմքին՝ Entity API-ին։

Դուք երևի նկատել եք, որ դաշտերը ինքնուրույն գոյություն չունեն, այլ «կցված» են էություններ՝ նոդեր, բլոկներ, տաքսոնոմիայի տերմիններ, տեսքներ և այլն։ Կարող եք ստեղծել փաթեթային էություններ, օրինակ՝ նյութերի տեսակներ, բլոկի տեսակներ, տաքսոնոմիայի բառարաններ։ Բայց ի՞նչ անել, եթե անհրաժեշտ է ստեղծել նոր էություն սեփական փաթեթներով։ Այս դեպքում անհրաժեշտ կլինի օգտագործել Entity API՝ նոր էություն ստեղծելու համար։

Ես ամբողջ կոդը ավելացրել եմ GitHub-ում՝ drupalbook_product մոդուլի մեջ, կարող եք ներբեռնել մոդուլը և ավելացնել ձեր կայքում․

https://github.com/levmyshkin/drupalbook8

Ամենապարզ ճանապարհը նոր էության տեսակ ստեղծելու՝ դա օգտագործելն է Drupal Console-ը, քանի որ անհրաժեշտ է կատարել ընդամենը մեկ հրաման։

https://drupalconsole.com/

Հաճախ չէ անհրաժեշտ նոր էության տեսակ ստեղծել։ Շատ փոքր և միջին նախագծերում հիմք են ընդունում contrib մոդուլները, օրինակ՝ Commerce-ը՝ օնլայն խանութների համար։

https://www.drupal.org/project/commerce

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

Այս հոդվածում մենք կուսումնասիրենք Entity API-ն և կստեղծենք մեր սեփական Product էության տեսակ, որը կարող է ծառայել որպես փոքր կատալոգ կամ խանութի հիմք։ Եթե որոշեք ստեղծել սեփական խանութ, խիստ խորհուրդ եմ տալիս օգտագործել Commerce մոդուլը՝ ժամանակ և ռեսուրս խնայելու համար։

Երբ ցանկանում եք ստեղծել նոր էության տեսակ, հարց է առաջանում՝ ինչու չստեղծել պարզապես Product տիպի նոր նոդ և օգտագործել այն կատալոգի համար։ Այո, սա կարելի է անել փոքր կատալոգների համար՝ օգտագործելով Views և պարզ ֆիլտրեր գնի, մնացորդի և այլնի համար։ Բայց երբ ապրանքների քանակը դառնում է հազարավոր, մենեջերը դժվարությամբ կգտնի անհրաժեշտ ապրանքը բովանդակության էջում։ Նա կցանկանա ֆիլտրել ըստ անվան, կատեգորիայի, գույնի և այլ հատկությունների՝ մեկ էջում՝

/admin/content

Սա կդառնա խառնաշփոթ և կխանգարի այլ բովանդակության տեսակների՝ Լուրերի, Հոդվածների, Իրադարձությունների և Էջերի կառավարմանը։ Այդ պատճառով նման դեպքերում ստեղծում են առանձին Product էության տեսակ՝ սեփական ադմին պանելով։

Եկեք սկսենք Product էության առանձին տեսակ ստեղծել։ Նախքան հրամանի կատարումը, խորհուրդ է տրվում պահուստային պատճեն անել կայքից, գոնե տվյալների բազայի։ Քանի որ էության տեսակ ստեղծելու գործընթացում ստեղծվում են կոնֆիգներ, որոնք գրվում են տվյալների բազայում, և եթե ինչ-որ բան սխալ գնա ու կոնֆիգները գրվեն առանց համապատասխան ֆայլերի, դա կարող է կոտրել կայքը։ Նախ պահուստավորեք։

Այժմ ստեղծում ենք նոր մոդուլ, ինչը կարելի է անել նաև Drupal Console-ով․

drupal generate:module

https://hechoendrupal.gitbooks.io/drupal-console/en/commands/generate-module.html

$ vendor/bin/drupal generate:module

 // Բարի գալուստ Drupal մոդուլի գեներատոր

 Մուտքագրեք նոր մոդուլի անունը.
 > Drupalbook Product

 Մոդուլի մեքենայական անունը [drupalbook_product]:
 >

 Մոդուլի ուղին [modules/custom]:
 >

 Մոդուլի նկարագրությունը [My Awesome Module]:
 > Products catalog

 Փաթեթի անունը [Custom]:
 >

 Drupal-ի Core տարբերակը [8.x]:
 >

 Ցանկանու՞մ եք .module ֆայլ ստեղծել (yes/no) [yes]:
 > no

 Նշել մոդուլը որպես ֆիչա (feature) (yes/no) [no]:
 > no

 Ավելացնե՞լ composer.json ֆայլ (yes/no) [yes]:
 > no

 Ավելացնե՞լ մոդուլի կախվածություններ (yes/no) [no]:
 > no

 Ստեղծե՞լ unit test class (yes/no) [yes]:
 > no

 Ստեղծե՞լ թեմայացվող կաղապար (yes/no) [yes]:
 > no

 Շարունակե՞լ գործողությունը (yes/no) [yes]:
 > yes

Ստեղծված կամ թարմացված ֆայլեր
 Ստեղծման ուղի՝ /home/laptop/projects/drupalbook
 1 - /modules/custom/drupalbook_product/drupalbook_product.info.yml

                                                                                                                         
 Ստեղծված տողերի քանակը՝ "5"

Կամ ուղղակի ստեղծեք մոդուլ՝ drupalbook_product.info.yml ֆայլով․

name: 'drupalbook_product'
type: module
description: 'Products catalog'
core: 8.x
package: 'Drupalbook'

Այժմ կարող ենք գեներացնել Product էության տեսակ։

https://hechoendrupal.gitbooks.io/drupal-console/en/commands/generate-entity-content.html

$ drupal generate:entity:content

$ vendor/bin/drupal generate:entity:content

 // Բարի գալուստ Drupal-ի պարունակության էության գեներատոր

 Մուտքագրեք մոդուլի անունը [admin_toolbar]:
 > drupalbook_product

 Մուտքագրեք նոր պարունակության էության PHP դասի անունը [DefaultEntity]:
 > DrupalbookProductEntity

 Նշեք նոր պարունակության էության մեքենայական անունը [drupalbook_product_entity]:
 >

 Նշեք նոր պարունակության էության պիտակը [Drupalbook product entity]:
 > Product

 Նշեք base-path-ը պարունակության էության ուղղորդումների համար [/admin/structure]:
 >

 Ցանկանու՞մ եք, որ այս էությունն ունենա փաթեթներ (bundles)? (yes/no) [no]:
 > yes

 Ձեր էությունն թարգմանելի՞ է: (yes/no) [yes]:
 > yes

 Ձեր էությունն վերանայելի՞ է (revisionable): (yes/no) [yes]:
 > no


 // generate:entity:config

 Նշեք base-path-ը կարգավորման էության ուղիների համար [/admin/structure]:
 >

Ստեղծված կամ թարմացված ֆայլեր
 Ստեղծման ուղի՝ /home/laptop/projects/drupalbook
 1 - modules/custom/drupalbook_product/drupalbook_product.permissions.yml
 2 - modules/custom/drupalbook_product/drupalbook_product.links.menu.yml
 3 - modules/custom/drupalbook_product/drupalbook_product.links.task.yml
 4 - modules/custom/drupalbook_product/drupalbook_product.links.action.yml
 5 - modules/custom/drupalbook_product/src/DrupalbookProductEntityAccessControlHandler.php
 6 - modules/custom/drupalbook_product/src/DrupalbookProductEntityTranslationHandler.php
 7 - modules/custom/drupalbook_product/src/Entity/DrupalbookProductEntityInterface.php
 8 - modules/custom/drupalbook_product/src/Entity/DrupalbookProductEntity.php
 9 - modules/custom/drupalbook_product/src/DrupalbookProductEntityHtmlRouteProvider.php
 10 - modules/custom/drupalbook_product/src/Entity/DrupalbookProductEntityViewsData.php
 11 - modules/custom/drupalbook_product/src/DrupalbookProductEntityListBuilder.php
 12 - modules/custom/drupalbook_product/src/Form/DrupalbookProductEntitySettingsForm.php
 13 - modules/custom/drupalbook_product/src/Form/DrupalbookProductEntityForm.php
 14 - modules/custom/drupalbook_product/src/Form/DrupalbookProductEntityDeleteForm.php
 15 - modules/custom/drupalbook_product/drupalbook_product_entity.page.inc
 16 - modules/custom/drupalbook_product/templates/drupalbook_product_entity.html.twig
 17 - modules/custom/drupalbook_product/templates/drupalbook-product-entity-content-add-list.html.twig
 18 - modules/custom/drupalbook_product/drupalbook_product.module
 19 - modules/custom/drupalbook_product/config/schema/drupalbook_product_entity_type.schema.yml
 20 - modules/custom/drupalbook_product/src/Entity/DrupalbookProductEntityTypeInterface.php
 21 - modules/custom/drupalbook_product/src/Entity/DrupalbookProductEntityType.php
 22 - modules/custom/drupalbook_product/src/DrupalbookProductEntityTypeHtmlRouteProvider.php
 23 - modules/custom/drupalbook_product/src/Form/DrupalbookProductEntityTypeForm.php
 24 - modules/custom/drupalbook_product/src/Form/DrupalbookProductEntityTypeDeleteForm.php
 25 - modules/custom/drupalbook_product/src/DrupalbookProductEntityTypeListBuilder.php

                                                                                                                         
 Ստեղծված տողեր՝ "1060"

Այժմ, երբ մոդուլը գեներացված է, կարող եք այն ակտիվացնել, որպեսզի կայքում երևա նոր էության տեսակը․

drupal console

Entity-ի ստեղծման ժամանակ Drupal Console-ը հարցնում է, թե ինչ տեսակի պետք է լինի էությունը։

Մուտքագրեք նոր պարունակության էության դասը [DefaultEntity]:

Մեր էության PHP դասի անունը, խորհուրդ է տրվում անունի վերջում ավելացնել Entity։

Մուտքագրեք նոր պարունակության էության մեքենայական անունը [drupalbook_product_entity]:

Մեքենայական անունը առաջարկվում է դասի անվան հիման վրա, եթե սեղմեք Enter, կօգտագործվի առաջարկված անունը։

Մուտքագրեք base-path-ը էության ուղիների համար [/admin/structure]:

Ձեր էության տեսակն կունենա իր սեփական էջը CRUD գործողությունների համար․

structure drupal 8

Ապրանքի էջի տեսքը սկզբնականում շատ պարզ է, բայց կարելի է այն բարելավել ապագայում կամ ստեղծել Views-ով․

Product display

Նոր էություն ստեղծելու համար անհրաժեշտ է նախ ստեղծել այս էության փաթեթ՝ bundle։ Մենք ընտրել էինք փաթեթով էություն․

Ցանկանու՞մ եք, որ էությունն ունենա փաթեթներ (yes/no):

Հետևաբար, ստեղծում ենք նոր ապրանքի տեսակ։ Սա անհրաժեշտ է՝ տարբեր դաշտեր ավելացնելու համար՝ քաշ, չափս, գույն և այլն։ Օրինակ՝ մոնիտորները կունենան անկյունագիծ, իսկ կոշիկները՝ չափս։

Եկեք ստեղծենք նոր ապրանքի տեսակ՝ Հագուստ․

product type

Այժմ կարող եք հարմարեցնել դաշտերը ձեր ապրանքի տեսակի համար․

product type fields

Առնվազն անհրաժեշտ է գնի դաշտը։

Եկեք ստեղծենք մի քանի ապրանք և նայենք տվյալների բազան։ Մենք ունենք drupalbook_product_entity աղյուսակը, որտեղ պահվում են մեր ապրանքների UUID-ները․

product data

Կա նաև drupalbook_product_entity_field_data աղյուսակը, որտեղ պահվում են Properties։ Սրանք հատուկ դաշտեր են էության, որոնք պահվում են ուղղակի աղյուսակներում, քանի որ դրանք չեն փոփոխվում վերանայումից կախված։ Օրինակ՝ Name դաշտը՝ դա էության պիտակն է (node-ի դեպքում՝ Title)։

product entity

Եթե ավելացնենք դաշտեր, ապա յուրաքանչյուր դաշտի համար կստեղծվեն երկու աղյուսակ, քանի որ մենք ընտրել էինք վերանայումների աջակցություն՝

Ձեր էությունը վերանայելի՞ է (yes/no) [yes]

Հիմա արդեն կարծում եմ՝ հասկանում եք, թե ինչպես կարելի է ստեղծել նոր էության տեսակներ։ Հաջորդ հոդվածներում մենք կշարունակենք ընդլայնել մեր հարմարեցված կատալոգի/խանութի հնարավորությունները։

Ես ամբողջ կոդը ավելացրել եմ GitHub-ում՝ drupalbook_product մոդուլի մեջ, կարող եք ներբեռնել մոդուլը և ավելացնել ձեր կայքում․

https://github.com/levmyshkin/drupalbook8