gally szintaxis. Gally sablon motor. Gyors kezdés. Vezérlőkonstrukciók: feltételes utasítások és ciklusok

Nyomtatott űrlapok, levelek, SMS-ek és figyelmeztetések sablonjainak elkészítésére szolgál. Ezek egy html elrendezés gallyjelöléssel tarkítva, így sablonok létrehozásához szükséged van alapismeretek html és gally. A rendszer általában számos előre elkészített sablonnal rendelkezik, amelyeket alapul vehet.

Példák kérésekre:

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

Az objektumok mezőkön keresztül kapcsolódnak egymáshoz, azaz az egyik objektum mezőjéhez való hozzáféréssel egy másik objektumot kaphat. Ilyen esetekben a mező leírása a címtárban egy hivatkozás az objektumra, amely a mező elérésekor kerül visszaadásra.

Példa kérésre:

(% if order.getDeliveryType().getCode() == "orosz-posta" %) (( order.trackNumber )) (% endif %)

A gallyasablon létrehozásának megszakítása

Előfordulhatnak olyan helyzetek, amikor meg kell szakítania a sablongenerálást. Például egy triggernél szeretnénk levelet küldeni termékajánlással, de ha nem találunk ajánlást az ügyfélnek, akkor nem kell levélsablont generálni és elküldeni. A törléshez használja a (% cancel%) címkét.

Használati példa:

(% beállított ajánlás = legkelendőbb_termékek() %) (% ha javasolt|hossz > 0 %) (# javasolt termékek # megjelenítése) (% else %) (% cancel %) (% endif %)

Ha a (% cancel %) tüzel, akkor ez rögzítésre kerül:

A címkében megadhat egy üzenetet is, amely a következőben kerül rögzítésre.

Használati példa üzenettel:

(% set recom = legkelendőbb_termékek() %) (% if recom|length > 0 %) (# javasolt termékek # megjelenítése) (% else %) (% cancel "Nem található ajánlott termék" %) (% endif %)

A műveletnapló ebben az esetben a következő lesz:

Levélsablon generálásának lemondása esetén SMS ill nyomtatott formában, amelyek manuálisan jönnek létre, a felhasználó a címkében megadott üzenetet fogja látni (% cancel %) .

Gyakran ismételt kérdések

1. Egyéni rendelési mező értékének megjelenítése egy sablonban

Adatok egyéni mezőből történő kimenetéhez használja a getCustomField metódust. Példa:

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

A példában a some_code az egyéni mező karakterkódja.

2. Hiba történt egy dátumot tartalmazó rendelésmező megjelenítése közben

A probléma az, ha a következő hibaüzenetet látja:

A "__tostring" metódus meghívása "DateTime" objektumon nem megengedett

A tény az, hogy amikor egy gallysablonban dátumot tartalmazó rendelési (vagy vevői) mezőket jelenít meg, akkor a dátumszűrővel kell megadni a dátum kimeneti formátumát.

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

3. Hiba történt egy dátumtartományt tartalmazó mező megjelenítése közben

A probléma az, ha egy ehhez hasonló hibaüzenetet lát:

Az "m" tulajdonság meghívása "DateInterval" objektumon nem megengedett

A tény az, hogy amikor dátumtartományt tartalmazó mezőket jelenít meg egy gallysablonban, akkor dátumszűrőt kell használnia a kimeneti formátum megadásához.

(( időszak|dátum("%m") ))

A DateInterval kimeneti formátumok részletes leírása a következő címen található: http://php.net/manual/ru/dateinterval.format.php

4. Az aktuális dátum megjelenítése

A visszavonáshoz aktuális dátum használd a dátumszűrőt a következőképpen:

(( "most"|dátum("d.m.Y") ))

5. Vonalkód nyomtatása

Használhatja a http://www.barcodes4.me/apidocumentation szolgáltatást. Példa az adatok helyettesítésére:

2. gally – gally sablontervezőknek

Gally sablontervezőknek

Ez a dokumentum a sablonmotor szintaxisát és szemantikáját írja le, és a leghasznosabb hivatkozásként szolgál a Twig-sablonokat létrehozókhoz.

absztrakt

A sablon egyszerű szöveges fájl. Bármilyen szövegformátumot képes generálni (HTML, XML, CSV, LaTeX stb.). Neki nincs konkrét kiterjesztés, .html vagy .xml megfelelő.

A sablon tartalmaz változók vagy kifejezéseket, amelyeket értékekkel helyettesítenek a sablon kiértékelésekor és címkéket, amelyek vezérlik a sablon logikáját.

Az alábbiakban egy minimális sablon található, amely néhány alapvetést szemléltet. Az alábbiakban a következő részletekről lesz szó:

Weboldalam

Weboldalam

((a_változó))

Kétféle elválasztójel létezik: (% ... %) és (( ... )) . Az előbbi olyan utasítások végrehajtására szolgál, mint a for-ciklusok, az utóbbi a kifejezés eredményét írja ki a sablonban.

IDE integráció

Sok IDE támogatja a szintaxis kiemelését és az automatikus kiegészítést a Twig esetében:

  • Szövegtárs Twig csomagon keresztül
  • Vim a Jinja szintaktikai bővítményen vagy a vim-twig bővítményen keresztül
  • Netbeans a Twig szintaxis bővítményen keresztül (7.1-ig, natív a 7.2-ig)
  • PhpStorm(natív a 2.1-től)
  • Fogyatkozás Twig plugin segítségével
  • Magasztos szöveg Twig csomagon keresztül
  • GtkSourceView Twig nyelvdefiníción keresztül (a gedit és más projektek használják)
  • KódaÉs SubEthaEdit Twig szintaxis módban
  • Coda 2 különböző Twig szintaktikai módokon keresztül
  • KomodoÉs Komodo Edit Twid kiemelés/szintaktikai módban
  • Jegyzettömb++ a Notepad++Twig Highlighter segítségével
  • Emacs a web-mode.el-en keresztül
  • Atom PHP ágon keresztül az atomhoz
  • Kód Visual Studio Twig csomagon keresztül

Végrehajtás

A kényelem kedvéért a foo.bar a következőket teszi PHP szinten:

  • ha nem, és ha a foo egy objektum, ellenőrizze, hogy a bar érvényes tulajdonság-e;
  • ha nem, és ha a foo egy objektum, ellenőrizze, hogy a bar érvényes metódus-e (még akkor is, ha a bar egy konstruktor - használja a __construct()-t helyette);
  • ha nem, és ha a foo egy objektum, ellenőrizze, hogy a getBar érvényes metódus-e;
  • ha nem, és ha a foo egy objektum, ellenőrizze, hogy az isBar érvényes metódus-e;
  • ha nem, és ha a foo egy objektum, ellenőrizze, hogy a hasBar érvényes metódus-e;

foo["bar"] viszont csak PHP tömbökkel működik:

  • ellenőrizze, hogy a foo egy tömb és a bar érvényes elem-e;
  • ha nem, adja vissza nullát.

Globális változók

A következő változók mindig elérhetők a sablonokban:

  • _self: az aktuális sablon nevére utal;
  • _context: az aktuális környezetre utal;
  • _charset: az aktuális kódolásra utal.

Változók beállítása

A kódblokkon belüli változókhoz értékeket rendelhet. A feladatok a beállított címkét használják:

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

szűrők

A változók módosíthatók szűrők. A szűrőket (|) karakter választja el a változótól, és opcionális argumentumokat is tartalmazhat zárójelben. Több szűrőt is össze lehet láncolni. Az egyik szűrő kimenete a következőre kerül alkalmazásra.

A következő példa az összeset eltávolítja HTML címkék névből és fejlécekből:

(( név|csíkcímkék|cím ))

Az argumentumokat fogadó szűrőknél zárójelek vannak az argumentumok körül. Ez a példa egy listát fűz hozzá vesszővel elválasztva:

(( list|join(", ") ))

Ha szűrőt szeretne alkalmazni egy kódrészletre, csomagolja be egy szűrőcímkébe:

(% szűrő felső %) Ez a szöveg nagybetűssé válik (% végszűrő %)

tagok

    (% felhasználó a felhasználókban %)
  • (( felhasználó.felhasználónév|e ))
  • (%endfor%)
(( felhasználó.felhasználónév|e ))

Alapértelmezés szerint a nyerő szűrő a html stratégiát használja, de a kilépő kontextustól függően bármilyen más elérhető stratégiát kifejezetten használhat:

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

Automata árnyékolással dolgozik

Függetlenül attól, hogy az automatikus kilépés engedélyezve van-e vagy sem, az autoescape címkével megjelölheti a sablon azon részét, amelyet meg kell szüntetni, vagy nem:

(% autoescape %) Ebben a blokkban minden automatikusan kikerül (a HTML stratégia használatával) (% endautoescape %)

Alapértelmezés szerint az automatikus kilépés a html kilépési stratégiát használja. Ha más kontextusban ad ki változókat, akkor kifejezetten meg kell szüntetnie őket egy megfelelő menekülési stratégia használatával:

(% autoescape "js" %) Ebben a blokkban minden automatikusan kikerül (a JS stratégiával) (% endautoescape %)

Menekülés

Néha kívánatos, sőt szükséges, hogy a Twig figyelmen kívül hagyja azokat a részeket, amelyeket egyébként változóként vagy blokkként kezelnének. Például, ha az alapértelmezett szintaxist használja, és a (( forráskarakterláncként a sablonban, és nem a változót szeretné használni, akkor a trükköt kell használnia.

A legegyszerűbb módja a változóelválasztó ((()) kinyomtatása egy változó kifejezéssel:

{{ "{{" }}

Nagy szakaszok esetén célszerű a szó szerinti blokkot megjelölni.

makró

A makrók a hagyományos programozási nyelvek függvényeihez hasonlíthatók. Hasznosak a gyakran használt HTML-részletek újrafelhasználásához anélkül, hogy ismételné magát.

(% ha a telefon egyezik a következővel: "/^[\\d\\.]+$/" %) (% endif %)

Elszigetelt kezelő

A kezelő szivárgástesztet végez.

Igazat ad vissza, ha a bal oldali operandus a jobb oldalon található:

(# igaz # értéket ad vissza) (( 1 in )) (( "cd" in "abcde" ))

Tipp

Ezzel a szűrővel elzárási tesztet hajthat végre a Bejárható felületet megvalósító karakterláncokon, tömbökön vagy objektumokon.

Negatív teszt elvégzéséhez használja a not in operátort:

(% ha 1 nem a %-ban (# egyenlő a #-vel) (% ha nem (1 in ) %)

Teszt operátor

A kezelő teszteket végez. A tesztek segítségével tesztelhet egy változót egy közös kifejezéssel szemben. A helyes operandus a teszt neve:

(# megtudja, hogy egy változó páratlan-e #) (( a név páratlan ))

A tesztek érveket is felvehetnek:

(% ha a post.status állandó ("Post::PUBLISHED") %)

A tesztek érvényteleníthetők az is not operátorral:

(% ha a post.status nem állandó("Post::PUBLISHED") %) (# a #-nek felel meg) (% ha nem (a post.status állandó("Post::PUBLISHED")) %)

A Symfony keretrendszer tanulmányozása közben előbb-utóbb találkozni fogsz egy olyan fogalommal, mint a sablonmotor. Most értsük meg, mi az a sablonmotor, és miért van rá szükség.

A Symfony egy Twig nevű sablonmotort használ. Valójában nem a Twig az egyetlen sablonmotor, amelyet te és én használhatunk. Bármilyen más sablonmotort használhat.

De alapértelmezés szerint a Symfony a Twig sablonmotort használja.

Nézzük meg, miért van szükségünk egy sablonmotorra, és milyen célokra használják.

Ha emlékszünk az MVC modellre (modell - nézet - vezérlő), amelyről kicsit korábban beszéltünk, akkor a sablonmotor az, ami a „View” részhez tartozik.

Mint emlékszik, a mi feladatunk a felhasználó kérésére kibocsátott adatok bemutatása. Pontosan ugyanaz a sablonmotor. Fő feladata az adatok megjelenítése a felhasználó számára.

A sablonmotor-fájl egy normál szövegfájl. A Twig esetében ennek a fájlnak 2 kiterjesztése van.

Ez azt jelenti, hogy ez a fájl HTML-jelölést tartalmaz, másodsorban pedig a Twig sablonmotor szolgáltatásfájlja.

Ez a fájl lényegében 2 részből áll: normál html kód egyszerű html címkékkel, beépített CSS stílusok, beágyazott Javascript kód stb.

A szokásos HTML oldalakkal ellentétben a dokumentum jelölésen kívül bizonyos adatokat is megjelenít, amelyek a vezérlőről átkerülhettek volna rá. Speciális konstrukciók segítségével ezek az adatok beágyazódnak a forrás gallyfájlba.

A szerveren lévő adatok változhatnak, és automatikusan a twig fájlban is módosulnak. Azok. kaptunk egy html oldalt, amely néhány adatot tartalmaz a webszervertől.

Az adatokon kívül a gallyfájl tartalmazhat néhány olyan segédfunkciót is, amelyek leegyszerűsítik ezen adatok megjelenítését.

Azok. a sablonmotor olyan, mint egy sablon, és ebbe a sablonba átadhatunk bizonyos változókat, amelyek a szerverünk állapotától függenek.

Ezért a sablonmotor a „sablon” szóból származik. Valamilyen sablonoldalt tartalmaz, sablon HTML kódot és változó adatokat szúrnak be.

Azok. A sablonmotor egy olyan szolgáltatás, amely egy HTML oldalt készít az összes szükséges adattal, amely tükrözi a webszerverünk állapotát, és visszaküldi ezeket az adatokat a vezérlőnek.

És a vezérlő már visszaküldi a kész HTML kódot az adott webhely látogatójának. aki kérte.

Ez így működik. Remélem, világosabbá vált, mi az a sablonmotor, és miért van rá szükség, és most elkezdhetjük megvizsgálni az eszközzel való munka konkrét példáit.

- "fordító sablon processzor nyitott forráskód, PHP programozási nyelven íródott. Armin Ronacher 2008-ban írta a Twig-et a Chyrp blogplatform számára. Soha nem tért vissza a fejlesztéshez, és inkább a Python fejlesztésére összpontosított. A Twig sablonnyelv szintaxisa a Jinja és Django sablonmotorokból származik, amelyek közül az előbbit szintén Ronaker készítette. Ennek a sablonmotornak az ötletét Fabien Potencier, a Symfony keretrendszer vezető fejlesztője és ideológusa fejlesztette ki és támogatja, amelyben alapértelmezés szerint a Twig használatos." (https://ru.wikipedia.org/wiki/Twig) .

A Drupal 8 összes Twig sablonja erre van fordítva php fájlokés a sites/default/files/php/twig/ könyvtárban tárolódnak. A sablonfájlokat a rendszer gyorsítótárban tárolja újrafelhasználás céljából, és tárolja fájlrendszer a teljesítmény javítása érdekében csak a Twig gyorsítótár törlésekor fordítják újra őket.

A modulokban és témákban található összes sablonnak a könyvtárban kell lennie /sablonok.

Miért Twig? Először is, biztonságosabb. A Drupal 7-es sablonokban gyakran megjelentek a tisztítatlan adatok, és ez elvileg érthető is, hiszen az elrendezéstervezőnek nem szabadna figyelnie a programozó munkáját, aki egyszerűen elfelejtheti átadni az adatokat a check_plain()-on keresztül. A Drupal 8 sablonjaiban a változók alapértelmezés szerint kihagyásra kerülnek. Emellett valószínűleg sokan megfigyelték a sablonokban SQL lekérdezésekés az alkalmazáslogika egyéb örömei, de ez ki lesz zárva a Twig-sablonokból.

Másodszor, a Twig-nek van egy nagyon érdekes tulajdonsága - a sablon öröklődése. Most már csak létre kell hoznia egy alapvető szülősablont, majd az utódsablon létrehozásakor meg kell adnia a szülősablont az extends címkében. Például egy gyermekcsomópont-sablon létrehozásához be kell írnia:


(% kiterjeszti a "node.html.twig" kifejezést %)

Példaként tekintsük az öröklődést blokkosablonok segítségével. A block.html.twig blokk alapvető szülősablonja ehhez hasonló kódot tartalmaz

(( cím_előtag )) (% ha címke %) ((címke))(% endif %) (( title_suffix )) (% blokktartalom %)

(( tartalom ))
(%endblock%)

Ebben az esetben a blokkcímke tartalma átírható a gyermeksablonba. Nézzük meg egy blokk sablonkódját egy keresési űrlappal block--search-form-block.html.twig

(% kiterjeszti a "block.html.twig" fájlt %) (% blokktartalom %) (( szülő() ))

(%endblock%)

A gyermeksablon tartalmazza az összes block.html.twig jelölést, kivéve a blokkcímkén belüli átírt tartalmat:

(% blokktartalom %) (% végblokk %)

Nézzük meg a fő különbségeket a PHPTemplate és a Twig között példákon keresztül

Sablon- és függvényfájlok elnevezése

PHPTemplate sablonfájl: node--article.tpl.php
Twig sablonfájl: node--article.html.twig

A legtöbb theme_ függvény már szerepel a sablonokban (egy hatalmas plusz)
PHPTemplate függvény: theme_node_links()
Twig sablonfájl: node-links.html.twig

Docblock és megjegyzések

Docblock a PHPTemplate-ben:

(# /** * @file * Fájl leírása */ #)

A normál PHP megjegyzések helyett a megjegyzések most így néznek ki:

(# gally megjegyzés #)

Munka változókkal

Változó kimenet:

(( tartalom ))

Objektumok és tömbelemek tulajdonságainak megjelenítése:

test; ?>

(( tartalom.törzs ))

Tömbelemek megjelenítése hash-sel a kulcs nevében

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

Változóba írás:

field_image; ?>

(% beállított kép = tartalom.mező_kép %)

Írás egy tömbváltozóba:

(% beállított osztályok = ["osztály1", "osztály2", "osztály3"] %)

Feltételek

megjegyzések): endif; ?>

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

megjegyzések)): endif; ?>

(% ha a content.comments nem üres %) (% endif %)

megjegyzések)): endif; ?>

(% ha a content.comments meg van határozva %) (% endif %)

0): endif; ?>

(% ha a szám > 0 %) (% endif %)

Ciklusok

(% felhasználó a felhasználókban %) (% endfor %)

Térgazdálkodás

A Twig lehetővé teszi a szóköz eltávolítását a kimenetből egy szimbólum használatával - a szerkezet elején és/vagy végén {{ }} változók megjelenítéséhez.

Mind az elején, mind a végén:

((- blokk.tartalom -))
(# Eredmény:
tartalom
#}

Csak az elején:

((- blokk.tartalom ))
(# Eredmény:
tartalom
#}

Csak a végén:

(( blokk.tartalom -))
(# Eredmény:
tartalom
#}

A Twig hivatalos dokumentációja Drupal 8-ban

Vélemények