logo

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

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

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

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

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

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

Scroll
19/06/2025, by Ivan

Այս էջում նկարագրվում է API-ն պարզ կոնֆիգուրացիոն տվյալների ստացման և կարգավորման համար։ (Սա վերաբերում չէ կոնֆիգուրացիոն օբյեկտներում պահվող տեղեկություններին։)

Կոնֆիգուրացիոն տվյալներ

Յուրաքանչյուր մոդուլ կարող է տրամադրել կանխադրված կոնֆիգուրացիա։ Օրինակ՝ սպասարկման ռեժիմի կարգավորումները սահմանված են core/modules/system/config/install/system.maintenance.yml ֆայլում։ Այս ֆայլի առաջին մասը հանդիսանում է անվան տարածք, որը ցույց է տալիս, թե որ մոդուլն է տրամադրել այդ կոնֆիգուրացիան (այս դեպքում՝ system մոդուլը), այնուհետև ենթահամակարգը (այս դեպքում՝ maintenance-ը)։ Ֆայլը պետք է գտնվի config/install թղթապանակում։ Ֆայլի անվան մեջ պետք է պարունակվի «.» նշանը՝ ստուգելու համար ConfigBase->validateName($name) մեթոդով։ Այս ֆայլը պարունակում է հետևյալ YAML-ը՝

message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.'
langcode: en

Կոնֆիգուրացիան կարող է լինել նաև ներդիրային, ինչպես system.performance.yml-ում նշված կարգավորումները․

cache:
  page:
    enabled: '0'
    max_age: '0'
preprocess:
  css: '0'
  js: '0'
response:
  gzip: '0'

Կարևոր է՝ արմատային բանալիները պետք է լինեն քարտեզավորում (map)

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

entity_type:
  commerce_order:
    foo: 'bar'
  node:
    foo: 'bar'
  user:
    foo: 'bar'

Եթե էնթիթի տեսակներն արմատային բանալին են, ապա հնարավոր չէ կոնֆիգուրացիան ներկայացնել սկեմայի միջոցով։ Եվ ավելին, Drupal-ի կորն չի կարող լրացուցիչ տեղեկություններ ավելացնել, երբ կոնֆիգուրացիան տեղադրվում է մոդուլի (կամ թեմայի) տեղադրման մաս হিসেবে։

Կոնֆիգուրացիայի հետ փոխգործակցություն

Դուք այս ֆայլերի հետ փոխգործակցում եք Config օբյեկտի միջոցով՝ ստեղծելով Config օբյեկտի օրինակ՝ կանչելով config() ֆունկցիան ֆայլի անվանով առանց ընդլայնման։ config ֆունկցիայի կանչը կվերադարձնի \Drupal\Core\Config\ImmutableConfig-ի օրինակ։

// Անփոփոխ Config (մատչելի միայն կարդալու համար)։
$config = \Drupal::config('system.performance');
// Փոխվող Config (կարդալ/գրել)։
$config = \Drupal::service('config.factory')->getEditable('system.performance');

Config օբյեկտ ստանալուց հետո կարող եք տարբեր կերպերով փոխգործակցել դրա հետ։

Կոնֆիգուրացիայի ընթերցում

Կոնֆիգուրացիան կարդացվում է get() մեթոդով։ Դա կարող եք անել տարբեր ձևերով։ Կոնֆիգուրացիայի մաս կարդալու համար պարզապես նշեք բանալին։

$config = \Drupal::config('system.maintenance');
$message = $config->get('message');

\Drupal::config() կանչերը կարող են շղթայական լինել։

$message = \Drupal::config('system.maintenance')->get('message');

Ներդիրային կոնֆիգուրացիա կարդալու համար բանալիները բաժանեք «.» նշանով։

$enabled = \Drupal::config('system.performance')->get('cache.page.enabled');

Կարող եք կարդալ կոնֆիգուրացիան ցանկացած մակարդակում, եթե այդ մակարդակի տակ կոնֆիգուրացիան ներդիրային է զանգվածի տեսքով։

$page_cache = \Drupal::config('system.performance')->get('cache.page');

Սա կվերադարձնի զանգված երկու բանալիներով՝ «enabled» և «max_age»։

Բոլոր կոնֆիգուրացիոն տվյալները վերադարձնելու համար պարզապես կանչեք get() առանց արգումենտների։

Դուք կարող եք նաև վերադարձնել բոլոր կոնֆիգուրացիոն բանալիները, որոնք հասանելի են համակարգում, կամ միայն այն բանալիները, որոնք սկսվում են որոշակի նախածանցով ($ prefix)։

$keys = \Drupal::service('config.factory')->listAll($prefix = "");

Կոնֆիգուրացիայի գրառում

Կոնֆիգուրացիան փոփոխելու համար պետք է ստանաք \Drupal\Core\Config\Config (փոփոխելի կոնֆիգուրացիոն օբյեկտ) օրինակ՝ կանչելով getEditable() կոնֆիգուրացիայի ֆաբրիկայում։ Փորձը փոփոխել կամ կանչել delete()/save() \Drupal\Core\Config\ImmutableConfig օրինակով կթողարկի ImmutableConfigException բացառություն։

Այդպես արվում է հետևյալ կերպ՝

\Drupal::service('config.factory')->getEditable('system.performance');

Կոնֆիգուրացիան փոփոխվում կամ ավելացվում է set() մեթոդով և պահպանվում save() մեթոդով։ Ուշադրություն դարձրեք, որ կոնֆիգուրացիան պետք է հստակ պահպանվի․ պարզապես արժեքը փոփոխելը չի պահպանում տվյալները։

Դուք պահպանում եք տվյալները կոնֆիգուրացիոն օբյեկտում նույն կերպ, ինչպես կարդում եք՝ հղումով բանալիներին և համապատասխան արժեքների պահպանմամբ։ Սինտաքսը նման է variable_set()-ին, որը նախկին Drupal տարբերակներում կար։

$config = \Drupal::service('config.factory')->getEditable('system.performance');

// Սկալար արժեք սահմանել։
$config->set('cache.page.enabled', 1);

// Կազմավորված արժեքների զանգված սահմանել։
$page_cache_data = ['enabled' => 1, 'max_age' => 5];
$config->set('cache.page', $page_cache_data);

// Պահպանել տվյալները տվյալների բազայում։
$config->save();

set() ֆունկցիան շղթայական է, ուստի եթե ուզում եք փոխել միայն մեկ արժեք, կարող եք անել դա մեկ տողով՝

\Drupal::service('config.factory')->getEditable('system.performance')->set('cache.page.enabled', 1)->save();

Եթե ցանկանում եք ամբողջությամբ փոխարինել կոնֆիգուրացիոն օբյեկտի տվյալները, օգտագործեք setData() ֆունկցիան։ setData()-ով հնարավոր չէ փոխարինել միայն ենթադաշտը․ եթե ցանկանում եք փոխարինել օբյեկտի մաս, պետք է օգտագործեք մեկ կամ մի քանի set() կանչեր։ setData()-ով պետք է տրամադրեք բոլոր բանալիներն ու արժեքները նույն ձևաչափով, ինչ get() ֆունկցիան վերադարձնում է առանց արգումենտների։ Օրինակ system.performance.yml պարամետրերի համար դա կլինի՝

// Բոլոր արժեքները սահմանել։
\Drupal::service('config.factory')->getEditable('system.performance')->setData([
    'cache' => [
      'page' => [
        'enabled' => '0',
        'max_age' => '0',
      ],
    ],
    'preprocess' => [
      'css' => '0',
      'js' => '0',
    ],
    'response' => [
      'gzip' => '0',
    ],
  ])
  ->save();

Կոնֆիգուրացիայի ջնջում

Անհատական արժեքները կարելի է ջնջել clear() ֆունկցիայով, որը նույնպես շղթայական է։

$config = \Drupal::service('config.factory')->getEditable('system.performance');
$config->clear('cache.page.max_age')->save();
$page_cache_data = $config->get('cache.page');

Այս օրինակով $page_cache_data կվերադարձնի զանգված՝ միայն «enabled» բանալով, որովհետև «max_age»-ը ջնջված է։

Բոլոր կոնֆիգուրացիաները կարող են ջնջվել delete() ֆունկցիայով։

\Drupal::service('config.factory')->getEditable('system.performance')->delete();

Նշեք, որ այս հետո չպետք է կանչեք save(), քանի որ այդպես կստեղծվի դատարկ կոնֆիգուրացիոն հավաքածու։

Լավագույն պրակտիկաներ

Թույլ տվեք չստեղծել կոնֆիգուրացիոն օբյեկտի օրինակները մի քանի անգամ նույն ֆունկցիայի շրջանակում, քանի որ դա վնասում է կատարողականությանը։ Ստորև նշված կոդը ավելորդ ձևով երկու անգամ է ստեղծում 'foo.bar' կոնֆիգուրացիոն օբյեկտի օրինակ։

\Drupal::service('config.factory')->getEditable('foo.bar')->set('foo', 'foo')->save();
\Drupal::service('config.factory')->getEditable('foo.bar')->set('bar', 'bar')->save();

Լավ լուծումը կլինի մի անգամ ստեղծել կոնֆիգուրացիոն օբյեկտի օրինակ, պահպանել փոփոխականում և աշխատել այդ փոփոխականի հետ մնացած կոդի ընթացքում։

$config = \Drupal::service('config.factory')->getEditable('foo.bar');
$config
  ->set('foo', 'foo')
  ->set('bar', 'bar')
  ->save();

Կոնֆիգուրացիայի արժեքների ներարկում ծառայություններում

Կոնֆիգուրացիայի արժեքները կարող են ներմուծվել ձեր հարմարեցված ծառայության մեջ՝ օգտագործելով ծառայությունների ֆաբրիկա։

services:
  app.service:
    class: Drupal/mail_module/Service
    factory: Drupal/mail_module/ServiceFactory:create
    arguments: ['@config.factory']
class ServiceFactory {
  static function create($config) {
    return new Service($config->get('mail.config')->get('transport'));
  }
}

class Service {
  public function __construct($transport) {
    $this->mailTransport = $transport;
  }
}

Օրինակն հարմարեցված է Ինչպես ներարկել կոնֆիգուրացիոն արժեքներ ծառայություններում թեմայից։

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.