Makroi u Twig šablonima
Iz zvanične Twig dokumentacije: „Makroi se mogu uporediti sa funkcijama u uobičajenim programskim jezicima. Korisni su za smeštanje često korišćenih HTML idiomskih izraza u višekratne elemente, kako bi se izbeglo ponavljanje.“
{% macro input(name, value, type, size) %} <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" /> {% endmacro %}
Makroi se razlikuju od nativnih PHP funkcija na nekoliko načina:
- Podrazumevane vrednosti argumenata se određuju pomoću filtera default unutar tela makroa;
- Argumenti makroa su uvek opciona;
- Ako se makrou proslede dodatni pozicioni argumenti, oni se smeštaju u posebnu promenljivu varargs kao lista vrednosti.
Međutim, kao i kod PHP funkcija, makroi nemaju pristup trenutnim varijablama šablona. Možete proslediti ceo kontekst kao argument koristeći posebnu promenljivu _context.
Pozivanje makroa
Iz _self
Makro možete staviti u isti Twig šablon iz kojeg ga pozivate. U tom slučaju se koristi kontekst _self ...
{{ _self.input(name, value, type, size) }}
Iz spoljnog fajla
Ipak, preporučuje se da makroi budu smešteni u poseban fajl (npr. macros.twig), kako bi mogli biti korišćeni u više šablona.
Na primer, u korisničkoj temi „mytheme“ ovde smeštamo fajl makroa ...
[site_root]/themes/custom/mytheme/templates/macros.twig
Napomena: fajl makroa može imati bilo koje ime sa .twig ekstenzijom, ali ne sme imati .html ekstenziju (npr. macros.html.twig neće raditi). Takođe, fajl mora biti smešten u direktorijum „templates“ bez obzira gde se koristi (na primer, za Layout Builder rasporede koje ste smestili u ... /mytheme/layouts, makro mora postojati u ../mytheme/templates ).
U šablonu gde želite da koristite makro, dodajte ovaj import izraz.
{% import '@mytheme/macros.twig' as myMacros %}
@mytheme magično pronalazi direktorijum „templates“ vaše teme, ali dodatnu strukturu direktorijuma morate navesti u import izrazu, na primer:
{% import '@mytheme/foo/bar/macros.twig' as myMacros %}
Napomena: u starijim verzijama ove dokumentacije pisalo je da nije potrebno navoditi strukturu poddirektorijuma, pa može biti razlika u praksi. Ako ovo radite u korisničkom modulu, koristite istu tehniku, samo umesto imena teme koristite ime modula (npr. @mycustommodule).
Zatim koristite makro ...
{{ myMacros.input(name, value, type, size) }}
Primeri
U Drupalu 8 makro se koristi za pravljenje, na primer, glavne navigacije (vidi fajl menu.html.twig).
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.