Prethodna obrada i izmena atributa u .theme fajlu
Kao i u Drupalu 7, možete uticati na izlaz određenog HTML-a pomoću funkcija prethodne obrade. Na primer, ako želite da dodate klasu u meni i više volite da to radite na PHP nivou, možete to učiniti. Ovo je dobar način da promenite markup vezan za temu, ali ako želite da napravite markup nezavisan od teme, bolje je napisati sopstveni modul.
(Napomena: za potrebe dokumentacije ovde „mytheme“ je mašinsko ime vaše teme; na primer, „bartik“ je mašinsko ime teme.)
Da biste radili sa funkcijama prethodne obrade:
1. Kreirajte ili izmenite fajl u direktorijumu vaše teme pod nazivom mytheme.theme
2. Kreirajte funkciju kao što je mytheme_preprocess_HOOK, gde HOOK označava element na koji želite da utičete*
3. Napišite svoje izmene i sačuvajte
4. Očistite keš da bi izmene bile vidljive (ako imate instaliran drush, pokrenite drush cr u komandnoj liniji)
* Imena HOOK prate pravila Twig šablona. Da biste napravili hook za page.html.twig, kreirate funkciju mytheme_preprocess_page. Za šablon node - article.html.twig, kreirate mytheme_preprocess_node__article (zamenjujući crtice donjom crtom). Da biste saznali imena hook-ova, pogledajte odeljak „Pronalaženje fajlova šablona uz debugovanje“.
Recimo da želimo da dodamo klasu my-menu svim menijima na vašem sajtu. Pretpostavljajući da se vaša tema zove „mytheme“, treba da napišete sledeću funkciju:
/** * Implements hook_preprocess_HOOK() for menu.html.twig. */ function mytheme_preprocess_menu(&$variables) { // Ako ne postoji niz klasa, kreirajte prazan niz. if (!isset($variables['attributes']['class'])) { $variables['attributes']['class'] = []; } // Spojite sa klasama koje su možda postavljene od drugih poziva hook_preprocess_menu $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-menu']); }
Ovo je vrlo slično Drupalu 7 i korisno je ako želite da prilagodite određeni meni.
Možete proveriti objekat $variables sa uslovom da odredite na koji meni ciljate. Stavke unutar $variables postaju dostupne u Twig-u nakon prethodne obrade teme.
Sada, da proširimo primer, pretpostavimo da želite da dodate klasu „my-main-menu“ glavnom meniju vašeg sajta. Evo kako bi izgledala funkcija za to:
/** * Implements hook_preprocess_HOOK() for menu.html.twig. */ function mytheme_preprocess_menu(&$variables) { if ($variables['menu_name'] == 'main') { if (!isset($variables['attributes']['class'])) { $variables['attributes']['class'] = []; } $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-main-menu']); } }
Razlike u odnosu na Drupal 7
Više ne postoji fajl template.php. Taj fajl je zamenjen fajlom mytheme.theme. Ipak, on i dalje funkcioniše na sličan način, omogućavajući hook-ovima da menjaju izlaz.
Drugi korisni linkovi
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.