logo

Dodatni tipovi blokova (EBT) - Novo iskustvo rada sa Layout Builder-om❗

Dodatni tipovi blokova (EBT) – stilizovani, prilagodljivi tipovi blokova: slajdšouvi, kartice sa tabovima, kartice, akordeoni i mnogi drugi. Ugrađena podešavanja za pozadinu, DOM Box, javascript dodatke. Iskusite budućnost kreiranja rasporeda već danas.

Demo EBT moduli Preuzmite EBT module

❗Dodatni tipovi pasusa (EPT) – Novo iskustvo rada sa pasusima

Dodatni tipovi pasusa (EPT) – analogni skup modula zasnovan na pasusima.

Demo EPT moduli Preuzmite EPT module

Scroll
19/06/2025, by Ivan

Na ovoj stranici opisuje se API za dobijanje i podešavanje podataka konfiguracije za jednostavnu konfiguraciju. (Ovo nije za informacije koje se čuvaju u objektima konfiguracije.)

Podaci konfiguracije

Svaki modul može da obezbedi podrazumevanu konfiguraciju. Na primer, podešavanja režima održavanja definisana su u core/modules/system/config/install/system.maintenance.yml. U ovom fajlu, prvi deo predstavlja prostor imena koji označava koji modul je obezbedio ovu konfiguraciju (sistemski modul u ovom primeru), a zatim sledi podsistem (održavanje u ovom primeru). Fajl mora biti smešten u direktorijumu config/install. Takođe, mora sadržati tačku ('.') u imenu fajla radi provere u ConfigBase->validateName($name). Ovaj fajl sadrži sledeći YAML:

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

Konfiguracija može biti i ugnježdena, kao u podešavanjima performansi (system.performance.yml):

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

VAŽNO: korenski ključevi moraju biti mapa

Podaci u korenu konfiguracije moraju biti predstavljeni kao mapa, a ne nepredvidiva lista. Na primer, ako skladištite podatke za svaki dostupni tip entiteta, napravite roditeljski ključ tip_entiteta i dodajte korenski ključ entity_type. Pogledajte primer rasporeda ispod:

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

Ako su tipovi entiteta korenski ključ, nije moguće predstaviti konfiguraciju pomoću sheme. Takođe, Drupal jezgro neće moći da doda dodatne informacije kada je konfiguracija instalirana kao deo instalacije modula (ili teme).

Interakcija sa konfiguracijom

Interakciju sa ovim fajlovima ostvarujete preko Config objekta kreiranjem instance Config objekta pozivom funkcije config() sa imenom fajla bez ekstenzije. Poziv funkcije config vraća instancu \Drupal\Core\Config\ImmutableConfig.

// Immutable Config (Samo za čitanje).
$config = \Drupal::config('system.performance');
// Mutable Config (Čitanje / Pisanje).
$config = \Drupal::service('config.factory')->getEditable('system.performance');

Nakon što dobijete Config objekat, možete sa njim da radite na različite načine.

Čitanje konfiguracije

Konfiguracija se čita korišćenjem metode get(). Ovo se može koristiti na više načina. Da biste pročitali deo konfiguracije, jednostavno navedite njegov ključ.

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

Pozivi \Drupal::config() mogu biti i lančani.

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

Da biste pročitali ugnježdeni podatak, razdvojite ključeve pomoću karaktera tačke ('.').

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

Možete čitati konfiguraciju na bilo kojem nivou, ako je ispod vašeg nivoa konfiguracija ugnježdena u niz.

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

Ovo će vratiti niz sa dva ključa — „enabled“ i „max_age“.

Da biste vratili sve podatke u konfiguracionom objektu, jednostavno pozovite get() bez argumenata.

Takođe možete vratiti sve konfiguracione ključeve dostupne u sistemu ili samo one koji počinju određenim prefiksom ($prefix).

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

Pisanje konfiguracije

Da biste promenili konfiguraciju, morate dobiti instancu \Drupal\Core\Config\Config (izmenjivi konfiguracioni objekat) pozivom getEditable() na fabričkoj servisu konfiguracije. Pokušaj izmene ili poziv delete() / save() na instanci \Drupal\Core\Config\ImmutableConfig baciće izuzetak ImmutableConfigException.

To se radi na sledeći način:

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

Konfiguracija se menja ili dodaje korišćenjem metode set() i čuva se metodom save(). Obratite pažnju da konfiguracija mora biti eksplicitno sačuvana; samo postavljanje podataka u konfiguraciju ih ne čuva.

Podatke u konfiguracioni objekat čuvate isto kao što ih čitate, referencirajući ključeve i postavljajući odgovarajuće vrednosti. Sintaksa je ista kao i variable_set() iz prethodnih verzija Drupala.

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

// Postavi skalarnu vrednost.
$config->set('cache.page.enabled', 1);

// Postavi niz vrednosti.
$page_cache_data = ['enabled' => 1, 'max_age' => 5];
$config->set('cache.page', $page_cache_data);

// Sačuvaj podatke u bazi.
$config->save();

Funkcija set() je takođe lančana, pa ako treba da promenite samo jednu vrednost, to možete uraditi u jednoj liniji koda.

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

Ako želite da zamenite sve podatke u konfiguracionom objektu, koristite funkciju setData(). Ne možete koristiti setData() da zamenite samo podskup podataka — ako želite da zamenite manje od celog objekta, morate umesto toga koristiti jedan ili više poziva set(). Kada koristite setData(), morate navesti svaki ključ i vrednost u istom formatu asocijativnog niza koji get() vraća bez argumenata. Za sistemska podešavanja performansi u system.performance.yml to bi izgledalo ovako:

// Postavi sve vrednosti.
\Drupal::service('config.factory')->getEditable('system.performance')->setData([
    'cache' => [
      'page' => [
        'enabled' => '0',
        'max_age' => '0',
      ],
    ],
    'preprocess' => [
      'css' => '0',
      'js' => '0',
    ],
    'response' => [
      'gzip' => '0',
    ],
  ])
  ->save();

Brisanje konfiguracije

Pojedinačne konfiguracione vrednosti mogu se ukloniti pomoću funkcije clear(), koja je takođe lančana.

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

U ovom primeru $page_cache_data će vratiti niz sa jednim ključem — „enabled“ — zato što je „max_age“ obrisan.

Svi skupovi konfiguracije mogu se obrisati korišćenjem funkcije delete().

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

Obratite pažnju da nakon toga ne treba pozivati save(), jer će to kreirati praznu verziju konfiguracionog skupa.

Najbolje prakse

Izbegavajte pravljenje više instanci konfiguracionih objekata u okviru iste funkcije, jer to može smanjiti performanse. Sledeći kod nepotrebno pravi dve instance objekta konfiguracije 'foo.bar'.

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

Bolje je napraviti instancu konfiguracionog objekta jednom, sačuvati je u promenljivoj i raditi sa njom tokom ostatka koda.

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

Uvođenje konfiguracionih vrednosti u servise

Vrednosti konfiguracije mogu se ubaciti u vaš prilagođeni servis koristeći fabričku metodu servisa.

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;
  }
}

Primer je prilagođen sa Kako uvesti vrednosti konfiguracije u servise?

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.