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
19/04/2025, by Ivan

Menu

Երբ դուք ներմուծում եք կոնֆիգուրացիան մեկ կայքից մյուսը, որոշ կոնֆիգուրացիաներ անհրաժեշտ են բովանդակության արտածման համար, բայց կոնֆիգուրացիայի մեջ բուն բովանդակություն չկա։ Այս դասում մենք կբացատրենք, թե ինչպես տեղափոխել բլոկներ, հանգույցներ (nodes) և դասակարգման տերմիններ (taxonomy terms) մեկ կայքից մյուսը։

Եկեք ստեղծենք բլոկ մեկ կայքում և տեղափոխենք դրա կոնֆիգուրացիան մյուս կայք՝ ինչպես տեղափոխել կոնֆիգուրացիաներ, կարող եք տեսնել նախորդ հոդվածում՝ 9.9. Կոնֆիգուրացիաների հետ աշխատանքը Drupal-ում. Active, Sync կոնֆիգուրացիա, կոնֆիգերի փոխանցում DEV-ից LIVE

admin

Դուք կտեսնեք հետևյալ սխալը՝ "This block is broken or missing. You may be missing content or you might need to enable the original module.":

Test lessons

Բլոկին անհրաժեշտ է block բովանդակության էություն (entity)՝ կոնկրետ UUID-ով։ UUID-ը էության (entity) եզակի նույնացուցիչն է։ Նույն բլոկը նույնիսկ նույն բովանդակությամբ ստեղծելով՝ նոր UUID կստեղծվի, և կոնֆիգուրացիան չի ճանաչի այն։ Կարող եք տեսնել անհրաժեշտ UUID-ը բլոկի կոնֆիգուրացիայի մեջ՝

block content

Մի շփոթեք բլոկի UUID-ը և կոնֆիգի UUID-ը։ Բանն այն է, որ կոնֆիգերը ևս էություններ են Drupal-ում, բայց ի տարբերություն բովանդակության էությունների (բլոկներ, հանգույցներ), կոնֆիգերը կոնֆիգուրացիոն էություններ են։ Հետագայում կծանոթանանք ContentEntity և ConfigEntity դասերի հետ։

Հիմա երբ գիտենք անհրաժեշտ UUID-ը, մենք պետք է ստեղծենք այդ բլոկը ծրագրային եղանակով՝ hook_update_n() ֆունկցիայի միջոցով՝

https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Extension!hook_update_N

hook_update_n()-ը պետք է ավելացվի մոդուլի .install ֆայլում։ Այն կգործի update.php կամ drush-ի միջոցով բազայի թարմացման ժամանակ։ Ամեն նոր hook_update_n() պետք է ունենա եզակի թիվ՝ սովորաբար 8000 և բարձր Drupal 8.x-ի համար։

/modules/custom/drupalbook/drupalbook.install

/**
 * Հավելում ենք պարզ տեքստային բլոկ նկարով։
 */
function drupalbook_update_8001(&$sandbox) {
  $uuid = 'dc0876cf-a242-4f4c-af0e-8a27fbe9e142';
  $block = \Drupal::entityTypeManager()->loadEntityByUuid('block_content', $uuid);

  if (empty($block)) {
    $block = \Drupal\block_content\Entity\BlockContent::create([
      'info' => 'Պարզ բլոկ տեքստով և նկարով',
      'type' => 'basic',
      'uuid' => $uuid
    ]);
    $block->body->value = 'Բարև աշխարհ!';
    $block->save();
  }
}

Այժմ այս կոդը պետք է տեղափոխել երկրորդ կայք և բացել update.php՝

drupal database

Drupal-ը կգտնի թարմացումը և կստեղծի բլոկը։

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

Նշենք նաև, որ միայն տեքստն է փոխանցվում, նկարները՝ CKEditor-ի միջոցով ներբեռնված, չեն փոխանցվում, և դրանք պետք է առանձին տեղափոխել։ Կարող եք օգտագործել drush, ssh, ftp կամ տեղադրել git-ում (եթե ֆայլերը քիչ են)։ Տեղակայման (deployment) գործընթացը տարբեր նախագծերում կարող է տարբեր լինել։

Նույնը վերաբերում է դասակարգման տերմինների ստեղծմանը։ Կոնֆիգերով փոխանցվում են միայն բառարանի կարգավորումները։ Տերմինները պետք է ստեղծվեն առանձին, օրինակ՝

\Drupal\taxonomy\Entity\Term;

/**
 * Ծրագրային եղանակով taxonomy term ստեղծում։
 */
function drupalbook_update_8002(&$sandbox) {
  $term = Term::create([
    'name' => 'Drupal 8',
    'vid' => 'tags',
  ])->save();
}

vid դաշտում նշվում է բառարանի մեքենայական անունը։

Հանգույց ստեղծելու համար կարող եք օգտվել հետևյալ կոդից՝

/**
 * Ծրագրային եղանակով node ստեղծում։
 */
function drupalbook_update_8003(&$sandbox) {
  $node = \Drupal\node\Entity\Node::create(['type' => 'page']);
  $node->set('title', 'Մեր մասին');
  $body = [
    'value' => 'Տեքստ մեր մասին',
    'format' => 'basic_html',
  ];
  $node->set('body', $body);
  $node->status = 1;
  $node->enforceIsNew();
  $node->save();
}

Կարելի է նաև գրել այսպես՝

$node->body->format =  'basic_html';
$node->body->value =  'Տեքստ մեր մասին';

Ամեն անգամ նոր hook_update_n() ավելացնելիս անհրաժեշտ է գործարկել update.php։ Եթե դուք օգտագործում եք Acquia կամ այլ հոսթինգ ավտոմատ տեղակայմամբ, ապա դա տեղի կունենա ինքնաբար։

Կոդի օրինակները կարող եք տեսնել GitHub-ում՝
https://github.com/levmyshkin/drupalbook8