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
((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%)
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ímke))
(% endif %) (( title_suffix )) (% blokktartalom %)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 %)
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:
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:
Csak az elején:
Csak a végén:
A Twig hivatalos dokumentációja Drupal 8-ban
Vélemények