logo

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

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

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

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

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

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

Scroll
19/06/2025, by Ivan

Drupal 8-ի կոնֆիգուրացիայի համակարգը կառավարում է կոնֆիգուրացիան միատեսակ ձևով։ Նախնականում Drupal-ը պահպանում է կոնֆիգուրացիոն տվյալները տվյալների բազայում, սակայն դրանք կարող են արտահանվել YAML ֆայլերի, ինչը թույլ է տալիս կառավարել կոնֆիգուրացիան տարբերակի վերահսկման միջոցով։ Սակայն կան դեպքեր, երբ կոնֆիգուրացիոն արժեքները պետք է վերագրվեն որոշակի նպատակներով։ Drupal 7-ում գոյություն ուներ գլոբալ $conf փոփոխական, որը սովորաբար լրացվում էր settings.php ֆայլում պայմանական վերագրման արժեքներով կոնֆիգուրացիայի համար։ Այս համակարգի խոշոր թերությունը այն էր, որ վերագրումները անցնում էին իրական կոնֆիգուրացիայի մեջ։ Երբ այն կոնֆիգուրացիայի ձևը, որն պարունակում էր վերագրված արժեքներ, պահպանվում էր, վերագրված արժեքը մտնում էր կոնֆիգուրացիայի պահոց։

Drupal 8-ը ներկայացնում է կոնֆիգուրացիայի վերագրման համակարգ, որը՝

  • Աջակցում է այս վերագրումներին որպես ժամանակավոր շերտեր՝ սովորական կոնֆիգուրացիոն արժեքների վրայով։
  • Չի օգտագործում վերագրված արժեքները կոնֆիգուրացիայի ձևերի համար։
  • Արդյունավետորեն կարող է պահել վերագրումները կոնֆիգուրացիոն մյուս ֆայլերի հետ միասին՝ աջակցելու պատրաստման և տարբերակի վերահսկման (օրինակ, լեզվային վերագրումների դեպքում։ տես ստորև)։

Drupal 7-ի գլոբալ $conf փոփոխականը Drupal 8-ում վերանվանվել է որպես $config և ակտիվացված է կոնֆիգուրացիայի համակարգի մեջ որպես նախնական։

Գլոբալ վերագրումներ

Drupal 8-ը պահպանում է գլոբալ $config փոփոխականի օգտագործման հնարավորությունը։ Կոնֆիգուրացիայի համակարգը միավորում է այս վերագրման արժեքները՝ Drupal\Core\Config\ConfigFactory::get() մեթոդի իրագործմամբ։ Երբ դուք ստանում եք արժեք կոնֆիգուրացիայից, գլոբալ $config փոփոխականը հնարավորություն է ստանում փոխել վերադարձվող արժեքը՝

// Ստացեք համակարգի կայքի սպասարկման հաղորդագրության տեքստը։ Այս արժեքը կարող է վերագրվել
// սկզբնականում գլոբալ $config-ից (ինչպես նաև թարգմանություններից, տես ստորև)։
$message = \Drupal::config('system.maintenance')->get('message');

Կոնֆիգուրացիայի արժեքները վերագրելու համար գլոբալ $config-ում՝ օրինակ settings.php-ում, դիմեք նրանց կոնֆիգուրացիոն բանալիներին՝

$config['system.maintenance']['message'] = 'Ներեցեք, մեր կայքը հիմա չի աշխատում։';

Ներկայացված արժեքների համար օգտագործեք ներքուստ գտնվող զանգվածի բանալիները՝

$config['system.performance']['css']['preprocess'] = 0;

$config-ի օգտագործման դեպքում settings.php-ից դուրս պետք է օգտագործեք նախորդ գլոբալ $config-ը։

Հնարավոր է օգտակար դիտարկել առկա կոնֆիգուրացիան հետևյալ եղանակներով՝

  • օգտագործելով «Configuration Manager» մոդուլը UI-ով, որը հասանելի է /admin/config/development/configuration/single/export հասցեով։
  • ուղիղ դիտելով ձեր կայքի YAML կոնֆիգուրացիոն ֆայլերը։
  • կամ հարցում կատարելով drush-ի միջոցով։
drush config-list
drush config-get system.performance --include-overridden

Ուշադրություն դարձրեք, որ settings.php-ի միջոցով $config-ով վերագրված արժեքները չեն երևա Drupal-ի ադմինիստրատիվ ինտերֆեյսում (մինչև #2408549: Կոնֆիգուրացիոն ձևերում չի նշվում, որ վերագրված արժեք կա), և դրանք չեն երևա drush-ի ստուգումներում (եթե չեք օգտագործում --include-overridden դրոշը)։ Ադմինիստրատիվ ինտերֆեյսը ցույց է տալիս միայն պահված կոնֆիգուրացիոն արժեքները, որպեսզի թույլ տա փոփոխություններ անել այլ միջավայրերում, որտեղ վերագրումներ չկան։

API բանալիների վերագրման օրինակ՝ անվտանգության նկատառումներով՝ տես՝ Commerce Gateway վճարային API բանալիների վերագրում

Վերագրումների խուսափում

Կարող եք ստանալ կոնֆիգուրացիան առանց վերագրումների՝ դյուրին մուտք գործելու հում (raw) կոնֆիգուրացիայի արժեքին (օրինակ՝ անջատելու համար վերագրումների կիրառումը)։ Սա շատ օգտակար է, եթե գրում եք կոնֆիգուրացիայի ձև։ Կարևոր է ձևում օգտագործել վերագրումներից ազատ միջավայր, որպեսզի արժեքները չանցնեն պահվող կոնֆիգուրացիայի մեջ։ Ավելի օգտակար է, եթե ձեր կոդը բազմալեզու միջավայրում է, որտեղ կոնֆիգուրացիայի արժեքները սովորաբար վերագրվում են որպես թարգմանություններ։

Ահա մի քանի օրինակներ՝ վերագրումներով և առանց դրանց կոնֆիգուրացիա ստանալու համար։

// Ստացեք կայքի անունը՝ վերագրումներով։
$site_name = \Drupal::config('system.site')->get('name');

// Ստացեք կայքի անունը առանց վերագրումների։
$site_name = \Drupal::config('system.site')->getOriginal('name', FALSE);
// Բացատրեք, որ փոփոխվող կոնֆիգուրացիան միշտ ազատ է վերագրումներից։
$site_name = \Drupal::configFactory()->getEditable('system.site')->get('name');

Կարող եք նաև ուղղակիորեն մուտք գործել կոնֆիգուրացիայի պահոցին՝ օգտագործելով config.storage ծառայությունը, որը իրագործում է StorageInterface::read()։ Սակայն սա հազվադեպ է հանդիսանում ճիշտ մոտեցում կոնֆիգուրացիային մուտք գործելու համար։

Լեզվային վերագրումներ

Օրինակ, երբ օգտատիրոջը ուղարկում եք էլփոստ, նրա կոնֆիգուրացիան պետք է լինի օգտատիրոջ լեզվով, ոչ թե էջի լեզվով։ Մնացեք նախորդ լեզուն, սահմանեք ճիշտ լեզուն ըստ օգտատիրոջ, կատարեք կոնֆիգուրացիայի հիման վրա գործողություններ և ապա վերադարձրեք լեզուն։

// Загружаем службу language_manager
$language_manager = \Drupal::service('language_manager');

// Получаем объект целевого языка
$langcode = $account->getPreferredLangcode();
$language = $language_manager->getLanguage($langcode);

// Запоминаем исходный язык до выполнения операции.
$original_language = $language_manager->getConfigOverrideLanguage();
// Устанавливаем язык перевода для фабрики конфигураций.
$language_manager->setConfigOverrideLanguage($language);

$mail_config  = \Drupal::config('user.mail');

// Теперь отправляем письмо на основе $mail_config, который на нужном языке.

// Возвращаем язык конфигурации обратно.
$language_manager->setConfigOverrideLanguage($original_language);

Լեզվային վերագրումները նույնպես պահվում են կոնֆիգուրացիայի պահոցում (հակառակը գլոբալ $config-ի վրա հիմնված վերագրումների)։ Լեզվային վերագրումները պահվում են ֆայլերում, որոնք անվանվում են իրենց հիմնական ֆայլի անունով։ Եթե կոնֆիգուրացիայի user.mail ֆայլի համար գոյություն ունի վերագրում որոշակի լեզվի համար, այն կկոչվի language.config.$langcode.user.mail։ Վերագրման ֆայլերի անունները կազմվում են language.config. նախածանցով, հետո լեզվի կոդով, և հետո կոնֆիգուրացիայի հիմնական բանալին։ Վերագրման ֆայլերի պահպանումը միասին սովորական կոնֆիգուրացիայի հետ ապահովում է աստիճանաբար թարգմանման հնարավորությունը, և դրանք կարելի է փոխել ինչպես հիմնական կոնֆիգուրացիան։

Ինչպե՞ս են ստեղծվում այս լեզվային վերագրման ֆայլերը։ Լոկալ մոդուլը ինտեգրվում է համակարգային իրադարձությունների հետ՝ ստեղծելու թարգմանության ֆայլեր մատակարարվող կոնֆիգուրացիայի համար՝ հիմնված կոնֆիգուրացիայի սխեմայի տեղեկության վրա։ Կա նաև հիմնական կոնֆիգուրացիայի թարգմանության մոդուլ, որը ապահովում է UI կոնֆիգուրացիայի թարգմանման համար՝ ինչպես մատակարարված, այնպես էլ օգտվողի կոնֆիգուրացիայի համար, և աշխատում է նույն լեզվային վերագրման ֆայլերի հետ։

Վերագրումներ մոդուլներից

Կարող է նաև հնարավոր լինել մոդուլի մակարդակի վերագրումներ ապահովել ցանկացած մոդուլից։ Չնայած Drupal-ի միջուկը աջակցում է գլոբալ և լեզվային վերագրումներին, կան օգտագործման դեպքեր բազմաթիվ այլ տեսակների վերագրումների համար՝ ներառյալ օգտագործողի դերերի, կոնտեքստային, դոմենային, խմբային և այլն։ Մոդուլները կարող են սահմանել իրենց չափանիշները այս վերագրումների իրականացնելու համար։

Երբ ConfigFactory-ն հավաքում է մոդուլներից տրամադրվող վերագրումները, նա կանչում է բոլոր ծառայությունները, որոնք նշված են որպես config.factory.override:

config_example.services.yml
services:
  config_example.overrider:
    class: Drupal\config_example\Config\ConfigExampleOverrides
    tags:
      - {name: config.factory.override, priority: 5}

Կարգավորեք գրանցման առաջնահերթությունը, որպեսզի նշեք վերագրումների առաջնահերթությունը։ Բարձր առաջնահերթությամբ վերագրումները գերակշռում են ավելի ցածր առաջնահերթության վերագրումներին (հաճախ նույն կոնֆիգուրացիայի անվան դեպքում)։

src/Config/ConfigExampleOverrides.php
namespace Drupal\config_example\Config;

use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Config\ConfigFactoryOverrideInterface;
use Drupal\Core\Config\StorageInterface;

/**
 * Օրինակ կոնֆիգուրացիայի վերագրում։
 */
class ConfigExampleOverrides implements ConfigFactoryOverrideInterface {

  /**
   * {@inheritdoc}
   */
  public function loadOverrides($names) {
    $overrides = array();
    if (in_array('system.site', $names)) {
      $overrides['system.site'] = ['name' => 'Վերագրված կայքի անուն!'];
    }
    return $overrides;
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheSuffix() {
    return 'ConfigExampleOverrider';
  }
  
  /**
   * {@inheritdoc}
   */
  public function getCacheableMetadata($name) {
    return new CacheableMetadata();
  }

  /**
   * {@inheritdoc}
   */
  public function createConfigObject($name, $collection = StorageInterface::DEFAULT_COLLECTION) {
    return NULL;
  }

}

Իրենք կոնֆիգուրացիայի վերագրումները աշխատում են երեք տարբեր մակարդակներում՝ լեզու, մոդուլներ և settings.php, որտեղ վերջինն ունի առավելություն։ settings.php ֆայլում եղած վերագրումները գերակշռում են մոդուլների կողմից տրամադրված արժեքներին։ Մոդուլների կողմից տրամադրված վերագրումները գերակշռում են լեզվային վերագրումներին։ Մոդուլի վերագրման գրանցման առաջնահերթությունը կարգավորում է միայն վերագրումների միջև առաջնահերթությունը մոդուլների միջև և չի կարող բարձրացնել առաջնահերթությունը լեզվային կամ settings.php-ի վերագրումների նկատմամբ։

Հիշեք, որ Drupal Core-ի կոնֆիգուրացիայի ձևերը չեն օգտագործում վերագրված կոնֆիգուրացիոն արժեքները։ Ուստի վերոգրյալ մոդուլի վերագրման օրինակն օգտագործողը չի տեսնի «Վերագրված կայքի անուն!» /admin/config/system/site-information հասցեում։

Ավելի լավ է նշել, որ եթե դուք պետք է կարդաք կոնֆիգուրացիայի սկզբնական արժեքները վերագրման դեպքում՝ օրինակ համեմատման կամ միավորման համար, պետք է ստանաք դրանք \Drupal::configFactory-ից, այլ ոչ թե \Drupal::config-ից, որպեսզի խուսափեք վերագրման վերարտադրման ցիկլից։

$original = \Drupal::configFactory()->getEditable('system.site')->getOriginal('name', FALSE);

Լրացուցիչ տեղեկատվություն

Վերագրումների համակարգը վերջին/ընթացիկ ձևով ավելացվել է #2098119: Փոխարինել config կոնտեքստի համակարգը տեղական աջակցությամբ և մեկ իրադարձության վերագրումներով։

Պատմական/հին ինֆորմացիա կարող եք գտնել #1646580: Կոնֆիգուրացիայի իրադարձությունների և լսողների իրագործում՝ տեղայնացված կոնֆիգուրացիայի համար։ և #1763640: Կոնֆիգուրացիայի կոնտեքստ ներդնել՝ սկզբնական կոնֆիգուրացիան մատչելի դարձնելու համար։։ Լեզվային վերագրումները ավելացվել են ավելի ուշ՝ #2020361: Ստեղծել LanguageConfigContext՝ լեզվային վերագրումների ակտիվացման համար։

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.