twig sintaksa. Mehanizem predlog Twig. Hitri začetek. Kontrolni konstrukti: pogojni stavki in zanke

Uporablja se za pripravo predlog za tiskane obrazce, pisma, SMS in opozorila. So postavitev html, prepletena z oznakami vejic, zato jih potrebujete za ustvarjanje predlog osnovno znanje html in twig. Sistem ima praviloma več vnaprej pripravljenih predlog, ki jih lahko uporabite kot osnovo.

Primeri zahtev:

(% if order.fromApi %) (( order.getNickName() )) (% endif %)

Objekti so med seboj povezani preko polj, tj. z dostopom do polja enega objekta lahko dobite drug objekt. V takšnih primerih je opis polja v imeniku povezava do predmeta, ki se vrne, ko je polje dostopno.

Primer zahteve:

(% if order.getDeliveryType().getCode() == "russian-post" %) (( order.trackNumber )) (% endif %)

Preklic ustvarjanja predloge vejice

Lahko pride do situacij, ko boste morali preklicati ustvarjanje predloge. Na primer, na sprožilec želimo poslati pismo s priporočili za izdelke, vendar če za stranko ni najdenih priporočil, potem ni treba ustvariti predloge pisma in ga poslati. Za preklic morate uporabiti oznako (% cancel%).

Primer uporabe:

(% set recom = best_selling_products() %) (% if recom|length > 0 %) (# prikaz priporočenih izdelkov #) (% else %) (% cancel %) (% endif %)

Če se sproži (% preklic %), bo to zabeleženo:

V oznaki lahko določite tudi sporočilo, ki bo zabeleženo v .

Primer uporabe s sporočilom:

(% set recom = best_selling_products() %) (% if recom|length > 0 %) (# prikaz priporočenih izdelkov #) (% else %) (% cancel "Ni priporočenih izdelkov" %) (% endif %)

Dnevnik dejanj bo v tem primeru naslednji:

V primeru preklica generiranja predloge pisma, SMS oz tiskani obliki, ki so ustvarjeni ročno, bo uporabnik videl sporočilo, navedeno v oznaki (% preklic %).

Pogosta vprašanja

1. Kako prikazati vrednost polja naročila po meri v predlogi

Če želite izpisati podatke iz polja po meri, uporabite metodo getCustomField. primer:

(( order.getCustomField("some_code") ))

V primeru je some_code koda znakov polja po meri.

2. Napaka pri poskusu prikaza polja naročila, ki vsebuje datum

Težava je, ko vidite naslednje sporočilo o napaki:

Klicanje metode »__tostring« v objektu »DateTime« ni dovoljeno

Dejstvo je, da morate pri prikazovanju polj naročila (ali kupca), ki vsebujejo datum v predlogi twig, uporabiti filter datuma, da določite obliko zapisa datuma.

(( order.createdAt|date("d.m.Y") ))

3. Napaka pri poskusu prikaza polja, ki vsebuje časovno obdobje

Težava je, ko vidite takšno sporočilo o napaki:

Klicanje lastnosti »m« v objektu »DateInterval« ni dovoljeno

Dejstvo je, da morate pri prikazovanju polj, ki vsebujejo datumsko obdobje v predlogi twig, uporabiti datumski filter, da določite izhodni format.

(( obdobje|datum("%m") ))

Podroben opis izhodnih formatov DateInterval najdete na: http://php.net/manual/ru/dateinterval.format.php

4. Kako prikazati trenutni datum

Za umik trenutni datum uporabite datumski filter, kot je ta:

(( "zdaj"|datum("d.m.Y") ))

5. Kako natisniti črtno kodo

Uporabite lahko storitev http://www.barcodes4.me/apidocumentation. Primer zamenjave podatkov:

Twig 2 – Twig za oblikovalce predlog

Twig za oblikovalce predlog

Ta dokument opisuje sintakso in semantiko mehanizma predlog in bo najbolj uporaben kot referenca za tiste, ki ustvarjajo predloge Twig.

povzetek

Predloga je enostavna besedilna datoteka. Ustvari lahko katero koli besedilno obliko (HTML, XML, CSV, LaTeX itd.). Nima posebna razširitev, .html ali .xml so čisto v redu.

Predloga vsebuje spremenljivke oz izrazi, ki se nadomestijo z vrednostmi, ko je predloga ocenjena in oznake, ki nadzorujejo logiko predloge.

Spodaj je minimalna predloga, ki ponazarja nekaj osnov. Spodaj bomo govorili o naslednjih podrobnostih:

Moja spletna stran

Moja spletna stran

((a_spremenljivka))

Obstajata dve vrsti ločil: (% ... %) in (( ... )) . Prvi se uporablja za izvajanje stavkov, kot so for-zanke, drugi pa natisne rezultat izraza v predlogi.

IDE integracija

Številni IDE podpirajo označevanje sintakse in samodokončanje za Twig:

  • Textmate preko paketa Twig
  • Vim prek sintaksnega vtičnika Jinja ali vtičnika vim-twig
  • Netbeans prek vtičnika za sintakso Twig (do 7.1, izvirno do 7.2)
  • PhpStorm(izvorno iz 2.1)
  • Mrk prek vtičnika Twig
  • Vzvišeno besedilo preko paketa Twig
  • GtkSourceView prek definicije jezika Twig (uporabljajo ga gedit in drugi projekti)
  • Coda in SubEthaEdit prek načina sintakse Twig
  • Koda 2 prek drugačnega sintaksnega načina Twig
  • Komodo in Komodo Uredi prek načina označevanja/sintakse Twid
  • Beležnica++ prek Notepad++Twig Highlighter
  • Emacs preko web-mode.el
  • Atom prek veje PHP za atom
  • Koda Visual Studio preko paketa Twig

Izvedba

Za udobje naredi foo.bar naslednje na ravni PHP:

  • če ne in če je foo objekt, preverite, da je bar veljavna lastnost;
  • če ni in če je foo objekt, preverite, ali je bar veljavna metoda (tudi če je bar konstruktor - namesto tega uporabite __construct());
  • če ni in če je foo objekt, preverite, ali je getBar veljavna metoda;
  • če ne in če je foo objekt, preverite, ali je isBar veljavna metoda;
  • če ni in če je foo objekt, preverite, ali je hasBar veljavna metoda;

foo["bar"] na drugi strani deluje samo z nizi PHP:

  • preveri, ali je foo matrika in bar veljaven element;
  • če ne, vrni nič.

Globalne spremenljivke

V predlogah so vedno na voljo naslednje spremenljivke:

  • _self: nanaša se na trenutno ime predloge;
  • _context: nanaša se na trenutni kontekst;
  • _charset: nanaša se na trenutno kodiranje.

Nastavitev spremenljivk

Vrednosti lahko dodelite spremenljivkam znotraj kodnih blokov. Naloge uporabljajo nastavljeno oznako:

(% set foo = "foo" %) (% set foo = %) (% set foo = ("foo": "bar") %)

filtri

Spremenljivke je mogoče spreminjati filtri. Filtri so od spremenljivke ločeni z znakom (|) in imajo lahko neobvezne argumente v oklepajih. Več filtrov je mogoče povezati skupaj. Izhod enega filtra se uporabi za naslednjega.

Naslednji primer odstrani vse oznake HTML iz imena in glave:

((ime|striptags|naslov))

Filtri, ki sprejemajo argumente, imajo argumente v oklepajih. Ta primer doda seznam, ločen z vejicami:

(( seznam|pridruži se(", ") ))

Če želite uporabiti filter za del kode, ga zavijte v oznako filtra:

(% filter upper %) To besedilo postane veliko (% endfilter %)

člani

    (% za uporabnika v uporabnikih %)
  • (( uporabniško.uporabniško ime|e ))
  • (%endfor%)
(( uporabniško.uporabniško ime|e ))

Zmagovalni filter privzeto uporablja strategijo html, vendar lahko glede na ubežni kontekst izrecno uporabite katero koli drugo razpoložljivo strategijo:

(( user.username|e("js") )) (( user.username|e("css") )) (( user.username|e("url") )) (( user.username|e( "html_attr") ))

Delo z avtomatsko zaščito

Ne glede na to, ali je samodejno ubežanje omogočeno ali ne, lahko z oznako samodejnega ubežanja označite del predloge, ki naj bo ubežan ali ne:

(% autoescape %) Vse bo samodejno ubežano v tem bloku (z uporabo strategije HTML) (% endautoescape %)

Privzeto samodejno ubežanje uporablja strategijo uhajanja html. Če izpišete spremenljivke v drugih kontekstih, jih morate eksplicitno ubežati z ustrezno strategijo ubežanja:

(% autoescape "js" %) Vse bo samodejno ubežano v tem bloku (z uporabo strategije JS) (% endautoescape %)

beg

Včasih je zaželeno ali celo potrebno, da Twig prezre dele, ki bi jih sicer obravnavali kot spremenljivke ali bloke. Na primer, če je uporabljena privzeta sintaksa in želite uporabiti (( kot izvorni niz v predlogi in ne zagnati spremenljivke, morate uporabiti trik.

Najlažji način je, da ločilo spremenljivk ((()) natisnete z izrazom spremenljivke:

{{ "{{" }}

Pri velikih delih je smiselno označiti dobesedni blok.

makro

Makri so primerljivi s funkcijami v običajnih programskih jezikih. Uporabni so za ponovno uporabo pogosto uporabljenih izrezkov HTML brez ponavljanja.

(% če se telefon ujema z "/^[\\d\\.]+$/" %) (% endif %)

Operater zadrževalnika

Vhodni operater izvede preizkus tesnosti.

Vrne true, če je levi operand na desni:

(# vrne true #) (( 1 in )) (( "cd" v "abcde"))

Namig

S tem filtrom lahko izvedete zadrževalni test na nizih, nizih ali objektih, ki izvajajo vmesnik Traversable.

Za izvedbo negativnega testa uporabite operator not in:

(% če 1 ni v %) (# je enakovredno #) (% če ni (1 v ) %)

Testni operater

Operater izvaja teste. Preizkusi se lahko uporabljajo za testiranje spremenljivke glede na običajni izraz. Pravilni operand je ime testa:

(# ugotovi, ali je spremenljivka liha #) (( ime je liho ))

Testi lahko sprejmejo tudi argumente:

(% če je post.status konstanten ("Post::PUBLISHED") %)

Teste je mogoče razveljaviti z uporabo operatorja is not:

(% če post.status ni konstanten ("Post.::PUBLISHED") %) (# je enakovreden #) (% če ni (post.status je konstanten ("Post.::PUBLISHED")) %)

Med preučevanjem ogrodja Symfony boste prej ali slej naleteli na koncept, kot je mehanizem predloge. Razumejmo zdaj, kaj je mehanizem predlog in zakaj je potreben.

Symfony uporablja mehanizem predlog Twig. Pravzaprav Twig ni edini mehanizem predlog, ki ga lahko uporabljava ti in jaz. Uporabite lahko kateri koli drug mehanizem predlog.

Toda Symfony privzeto uporablja mehanizem predloge Twig.

Ugotovimo, zakaj potrebujemo mehanizem predlog in za kakšne namene se uporablja.

Če se spomnimo modela MVC (model - pogled - krmilnik), o katerem smo govorili malo prej, potem je mehanizem predloge tisti, ki spada v del "Pogled".

Kot se spomnite, je naša naloga predstaviti podatke, ki bodo izdani na zahtevo uporabnika. Popolnoma enak mehanizem predloge. Njegova glavna naloga je predstaviti podatke za prikaz uporabniku.

Datoteka mehanizma predloge je navadna besedilna datoteka. Za Twig ima ta datoteka 2 priponi.

To pomeni, da ta datoteka vsebuje oznake HTML in drugič, ta datoteka je servisna datoteka mehanizma predlog Twig.

V bistvu ta datoteka vsebuje 2 dela: običajno kodo html s preprostimi oznakami html, vgrajeno slogi CSS, vdelana koda Javascript itd.

Za razliko od običajne strani HTML poleg oznak dokumenta prikazuje tudi določene podatke, ki bi jih lahko vanj prenesli iz krmilnika. Z uporabo posebnih konstruktov so ti podatki vdelani v izvorno datoteko twig.

Podatki na strežniku se lahko spreminjajo in samodejno se spreminjajo tudi v datoteki twig. Tisti. prejeli smo html stran, ki vsebuje nekaj podatkov s spletnega strežnika.

Poleg podatkov lahko datoteka twig vsebuje nekatere pomožne funkcije, ki poenostavijo predstavitev teh podatkov.

Tisti. mehanizem predlog je nekaj podobnega predlogi in v to predlogo lahko posredujemo določene spremenljivke, ki so odvisne od stanja našega strežnika.

Zato mehanizem predlog prihaja iz besede "template". Vsebuje nekakšno stran s predlogo, kodo HTML predloge in vanj so vstavljeni spremenljivi podatki.

Tisti. Mehanizem predlog je nekaj podobnega storitvi, ki pripravi stran HTML z vsemi potrebnimi podatki, ki odražajo stanje našega spletnega strežnika, in te podatke vrne krmilniku.

In krmilnik že vrne dokončano kodo HTML temu obiskovalcu spletnega mesta. ki je to zahteval.

Tako to deluje. Upam, da je postalo jasneje, kaj je mehanizem predlog in zakaj je potreben, zdaj pa lahko začnemo obravnavati konkretne primere dela s tem orodjem.

- "prevajalnik predlog procesorja z odprtim izvorna koda, napisano v programskem jeziku PHP. Armin Ronacher je Twig napisal leta 2008 za blogersko platformo Chyrp. Nikoli se ni vrnil k razvoju in se je bolj osredotočil na razvoj Pythona. Sintaksa jezika predlog Twig izhaja iz mehanizmov predlog Jinja in Django, od katerih je prvega prav tako ustvaril Ronaker. Zamisel o tem motorju predlog je razvil in podpira Fabien Potencier, vodilni razvijalec in ideolog ogrodja Symfony, v katerem je privzeto uporabljen Twig." (https://ru.wikipedia.org/wiki/Twig) .

Vse predloge Twig v Drupal 8 so prevedene v php datoteke in so shranjeni v imeniku sites/default/files/php/twig/. Datoteke predlog so predpomnjene za ponovno uporabo in shranjene v datotečni sistem za izboljšanje zmogljivosti se znova prevedejo šele, ko je predpomnilnik Twig počiščen.

Vse predloge v modulih in temah morajo biti v imeniku /predloge.

Zakaj Twig? Prvič, bolj je varen. V predlogah Drupal 7 so bili pogosto prikazani neočiščeni podatki, kar je načeloma razumljivo, saj oblikovalec postavitve ne bi smel spremljati dela programerja, ki bi lahko preprosto pozabil posredovati podatke iz obrazcev prek check_plain(). V predlogah Drupal 8 bodo spremenljivke privzeto ubežale. Poleg tega so mnogi verjetno opazili v predlogah Sql poizvedbe in druge užitke aplikacijske logike, vendar bo to izključeno v predlogah Twig.

Drugič, Twig ima zelo zanimivo funkcijo - dedovanje predlog. Zdaj morate samo ustvariti osnovno nadrejeno predlogo in nato določiti nadrejeno predlogo v oznaki extends, ko ustvarjate podrejeno predlogo. Na primer, če želite ustvariti predlogo podrejenega vozlišča, morate vanjo napisati:


(% razširja "node.html.twig" %)

Oglejmo si dedovanje na primeru blokovnih predlog. Osnovna nadrejena predloga za blok block.html.twig vsebuje kodo, kot je ta

(( title_prefix )) (% če oznaka %) ((oznaka))(% endif %) (( title_suffix )) (% vsebina bloka %)

(( vsebina ))
(%endblock%)

V tem primeru je mogoče vsebino oznake bloka prepisati v podrejeni predlogi. Oglejmo si kodo predloge za blok z iskalnim obrazcem block--search-form-block.html.twig

(% razširi "block.html.twig" %) (% vsebina bloka %) (( nadrejeni() ))

(%endblock%)

Podrejena predloga bo vsebovala vse oznake block.html.twig razen prepisane vsebine znotraj oznake bloka:

(% vsebina bloka %) (% končni blok %)

Oglejmo si glavne razlike med PHPTemplate in Twig na primerih

Poimenovanje predlog in funkcijskih datotek

Datoteka predloge PHPTemplate: vozlišče--article.tpl.php
Datoteka predloge Twig: node--article.html.twig

Večina funkcij theme_ je zdaj vključenih v predloge (velik plus)
Funkcija PHPTemplate: theme_node_links()
Datoteka predloge Twig: node-links.html.twig

Docblock in komentarji

Docblock v PHPTemplate:

(# /** * @file * Opis datoteke */ #)

Komentarji namesto standardnih komentarjev PHP zdaj izgledajo takole:

(# Twig komentar #)

Delo s spremenljivkami

Spremenljivi izhod:

(( vsebina ))

Prikaz lastnosti predmetov in elementov polja:

telo; ?>

(( content.body ))

Prikaz elementov polja z zgoščeno vrednostjo v imenu ključa

(( item["#item"].alt ))

Pisanje v spremenljivko:

slika_polja; ?>

(% nastavljena slika = content.field_image %)

Pisanje v matrično spremenljivko:

(% nastavljenih razredov = ["razred1", "razred2", "razred3"] %)

Pogoji

komentarji): endif; ?>

(% if content.comments %) (% endif %)

komentarji)): endif; ?>

(% če content.comments ni prazen %) (% endif %)

komentarji)): endif; ?>

(% če je definiran content.comments %) (% endif %)

0): endif; ?>

(% če je število > 0 %) (% endif %)

Cikli

(% za uporabnike v uporabnikih %) (% endfor %)

Upravljanje prostora

Twig vam omogoča, da odstranite presledke iz izpisa s pomočjo simbola - na začetku in/ali koncu strukture {{ }} za prikaz spremenljivk.

Tako na začetku kot na koncu:

((- block.content -))
(# rezultat:
vsebino
#}

Čisto na začetku:

((- block.content ))
(# rezultat:
vsebino
#}

Šele na koncu:

(( block.content -))
(# rezultat:
vsebino
#}

Uradna dokumentacija za Twig v Drupal 8

Ocene