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

9.2. Šta znači "hook" u Drupalu?

27/05/2025, by Ivan

Ovaj članak ima za cilj da vas upozna sa Drupalom, dalje ćemo pisati primere koda, nakon dodavanja našeg prilagođenog modula.

Drupal nije monolitni sistem u kome je sve savršeno i ništa ne treba menjati. Vrlo često se od programera traži da se na sajt doda ova ili ona funkcionalnost. Da bismo mogli da održavamo Drupal core kod i dodajemo funkcionalnosti Drupalu, koristimo module. Modularni sistem omogućava proširenje mogućnosti Drupala. Ali šta ako treba proširiti mogućnosti gotovog modula za brojanje? Naravno, možemo poslati zahtev za unapređenje funkcionalnosti kreiranjem issue-a na drupal.org i možda za mesec, dva... godinu ili dve, dobićemo željenu funkcionalnost u određenom modulu. Ali možemo i drugačije – napisati potrebni kod sami. Da bismo proširili mogućnosti dodatnih modula Drupala, kao i samog Drupala, koristićemo hook-ove i plugine u sopstvenim modulima.

Glavna ideja je da ne treba da održavamo Drupal kod, kod dodatnih modula, čime se štedi novac za rad programera. Da bismo lako mogli da ažuriramo kod modula i Drupala, ne smemo menjati Drupal core i kod modula. Inače će se sve izmene izgubiti pri sledećem ažuriranju modula ili Drupala.

Za povezivanje modula sa Drupal core-om, kao i modula međusobno, Drupal ima sistem hook-ova. Hook je funkcija koja se poziva kao povratni poziv (callback), tj. kada izvršavanje koda dođe do hook-a, ubacuje se kod naše funkcije koju dodajemo u modulu. Tako možemo obrađivati korisničke podatke, menije, taksonomije, node-ove raznih tipova sadržaja pri promeni, dodavanju, brisanju ili samo pri učitavanju i prikazu. Postoji mnogo hook-ova za Drupal 8, mada manje nego za Drupal 7, jer je dosta hook-ova prebačeno u spoljne Symfony komponente:

https://api.drupal.org/api/drupal/core%21core.api.php/group/hooks/8.2.x

A ako pogledate Drupal 7 verziju, moraćete dugo da skrolujete:

https://api.drupal.org/api/drupal/includes%21module.inc/group/hooks/7.x

To ne znači da je Drupal 8 manje moćan, već da se sve što je bilo hook-om u Drupal 7 sada u Drupal 8 dodaje kroz odgovarajući plugin.

Ako pažljivo pogledate listu hook-ova u Drupal 8, videćete da na kraju imena često stoji _alter, što znači da je hook namenjen promeni vrednosti promenljivih, na primer:

hook_form_alter() – omogućava izmenu niza forme tokom njene obrade u Drupalu. Kasnije ćemo analizirati kako se forme generišu iz nizova u Drupalu. Da biste primenili ovaj hook u modulu, kao i ostale hook-ove, jednostavno napišete funkciju:

function mymodule_form_alter() {
  // promenite niz forme
}

Pojednostavio sam primer, nisam napisao argumente funkcije ni namespace, to ćemo kasnije razumeti, trenutno treba shvatiti kako hook-ovi funkcionišu. Mymodule je naš modul, umesto reči hook pišemo ime našeg modula i funkcija automatski prepoznaje i menja niz forme. Kako to radi? U metodi prepareForm se poziva druga metoda alter():

$this->moduleHandler->alter($hooks, $form, $form_state, $form_id);

To znači da svaki modul u Drupalu koji implementira hook_form_alter() ubacuje svoj kod na ovo mesto. Dakle, ako želimo da dodamo kod na neko mesto u Drupalu, prvo idemo hook-om, zatim pluginom, a ako je baš nemoguće drugačije, patch-ujemo / menjamo / hack-ujemo modul (nažalost, ponekad moramo). Za sada nismo imali zadatke koji zahtevaju menjanje plugina, pa hajde da naučimo kako se pišu sopstveni moduli.