Autor Zpráva
Josef Burger
Profil
Ahoj,
rád bych věděl Váš názor a získal zkušenosti s nějakým šablonovacím systémem pro PHP. V práci programujeme v Javě a šablonovací systém využíváme Velocity.
Chtěl bych se zeptat, zda pro PHP existuje nějaká alternativa se stejnou či podobnou syntaxí. Velocity se mi líbí a přijdem mi dobré.

Pokud nic podobného neexistuje, rád bych poprosil o jiné návrhy. Pro svůj projekt potřebuji jednoduchý šablonovací systém, který zvládne obdobné věci jako Velocity.

EDIT: Ještě poznámka: bez frameworku Nette nebo Zend, atd

Předem děkuji všem za odpovědi.
juriad
Profil
PHP má jeden šablonovací systém přímo v sobě - je jím PHP.
Existují i jiné šablonovací systémy. Pěkný přehled dvou dalších jednodušších (Twig, Latte) sepsal Jan Tvrdík: vkládání meta tagů pomoci php
Proklikej si jeho projekt na GitHubu, máš tam jejich přímé srovnání.
Josef Burger
Profil
juriad:
PHP má jeden šablonovací systém přímo v sobě - je jím PHP.
Ano, ale jak jsem psal, potřebuji oddělenou vrstvu (jako Velocity)...


Josef Burger:
Twig, Latte
díky, vyzkouším
juriad
Profil
Ze zkušenosti vím, že Velocity je velice silné, neznám jiný šablonovací systém, ve kterém si můžeš definovat funkce (makra), proměnné, předčasně ukončovat cyklus pomocí #break a zvládá rekurzi.
Nevím, zda vůbec existuje šablonovací jazyk se stejnou vyjadřovací silou. Plyne to z logiky, že v šablonovacím systému máš data jen vypisovat, nijak s nimi dále nemanipulovat, proto bys tyto prostředky vůbec neměl potřebovat.
Josef Burger
Profil
juriad:
makra jsou právě jedna z věcí, co od šablonovacího systému potřebuji
Joker
Profil
juriad:
Velocity je velice silné, neznám jiný šablonovací systém, ve kterém si můžeš definovat funkce (makra), proměnné, předčasně ukončovat cyklus pomocí #break a zvládá rekurzi
Lehce mimo téma, ale zdá se mi, že tohle by šablonovací systém umět neměl.
Vidím v tom „návrhový zlozvyk“ zvaný inner-platform effect. To znamená vytvoření systému tak rozsáhlého a s tak širokými možnostmi nastavení, že přestane být vhodný pro svůj původní účel a stane se z něj jakási náhražka platformy, na které byl naprogramovaný.

Jinak řečeno, dělat v PHP komplexní šablonovací systém s funkcemi a proměnnými a rekurzí atd. atd. atd. je vlastně snaha v PHP naprogramovat PHP.

Vzhledem k tomu, že v šabloně by neměla být žádná aplikační logika a je špatně pokud tam je (to je tedy pohled MVC, ale připadá mi rozumný) by v šablonovacím systému takové věci ani neměly být potřeba.
Josef Burger
Profil
Joker:
přijde mi rozumné využívat v rámci šablonovacího systému podmínky, cykly a makra. Rozhodně tím lze udělat nějakou aplikační logiku, ale pokud se systém využívá rozumně tak v tom nevidím problém.
Jde mi například o využití maker pro kusy HTML kódu, který se opakuje na různých stránkách atd. Nejde o aplikační logiku, ale pouze o výpis...
Jan Tvrdík
Profil
juriad:
neznám jiný šablonovací systém, ve kterém si můžeš definovat funkce (makra), proměnné, předčasně ukončovat cyklus pomocí #break a zvládá rekurzi
Vše popsané Latte umí. Ta rekurze se např. hodí pro vypsání stromového menu, viz dokumentace.


Joker:
dělat v PHP komplexní šablonovací systém (…) je vlastně snaha v PHP naprogramovat PHP
Jenomže to vlastně stejně děláš, protože šablony kompiluješ do PHP. Na Latte se dá tedy dívat taky jako na superset PHP, stejně jako např. TypeScript je superset JavaScriptu. Tedy umí to vše, co samotné PHP, ale navíc přidává nové jazykové konstrukce pro velmi pohodlnou práci se šablonami.
juriad
Profil
Jan Tvrdík:
Wow, díky. Ale asi neumí funkce (ve významu kus kódu, který bere parametry a vrací hodnotu, nevypisuje).
A stejně, integrovat Latte do našeho systému nepůjde. Podívám se na ně a možná ho zkusím na nějaké své projekty.
Docela se mi líbí možnost definovat vlastní makra metodou addMacro().

V našem projektu (Webová aplikace v Javě) znásilňujeme velocity z důvodu, že potřebujeme programovací jazyk pro šablony (které aktivně komunikují s naším Javovým API).
Konzultant dostane zadání, že má vytvořit nějakou složitou hierarchii stránek v našem systému (reprezentace firemní struktury, reprezentace databáze). K tomu dostane databázi, ve které jsou data, a musí si vystačit s prostředky šablon (Javu nemá k dispozici kvůli nutnosti rekompilace celé aplikace).
Z takového důvodu máme celý mechanismus, který deklarativně popíše jaké stránky se mají vytvořit, jaké šablony používají (uživatelsky definované) a které databázové dotazy (uživatelsky definované) mají šablony k dispozici.

Proto hledáme šablonovací jazyk (výstupem je kus HTML) blízký Velocity (kvůli konzultantům, jsou zvyklí) s velkou vyjadřovací silou (větší než Velocity), který se nekompiluje, je rychlý (řádově rychlejší než Velocity) a umí komunikovat s Javou.
Pokud by existoval svižný interpretter PHP v JVM, to bylo něco pro nás. :)
Jan Tvrdík
Profil
juriad:
Ale asi neumí funkce (ve významu kus kódu, který bere parametry a vrací hodnotu, nevypisuje).
Umí (protože je umí PHP), ale definovat si vlastní PHP funkce v šabloně mi fakt nedává smysl, takže nevím o tom, že by to reálně někdy někdo použil.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: