Autor | Zpráva | ||
---|---|---|---|
RastyAmateur Profil |
#1 · Zasláno: 6. 2. 2016, 09:58:23
Krásné dopoledne přeji!
Chtěl bych se zeptat na pár věcí ohledně šablonovacích systémů. Jak se ty šablonovací systémy vytvářejí? Co jsem se tak ptal a četl, tak přes reguláry to není moc dobré. Prý se to dělá přes DOM. Sice bych to asi nezvládl, ale zajímá mě to. A ještě jedna otázka. Doporučí mi někdo nějaký jiný šablonovací systém? Znám např. Smarty, ale ještě jsem ho nezkoušel... Děkuji, RA |
||
Str4wberry Profil |
#2 · Zasláno: 6. 2. 2016, 10:41:52
Samo o sobě je PHP šablonovací systém. Tedy jde používat obyčejné PHP.
Šablonovací systémy, které jsou asi v dotazu myšleny, potom fungují zpravidla tak, že vezmou obsah zapsaný v nějaké jednodušší syntaxi a převedou ji a uloží do obyčejného PHP. Zjednodušeně řečeno se {$promenna} nahradí za <?php echo $promenna; ?> . Tuhle náhradu teoreticky jde zajistit i regulárními výrazy. Jak se ale začnou používat cykly, podmínky a další bloky, přestávají regulární výrazy stačit.
Doporučil bych ještě třeba Latte. |
||
Alphard Profil |
Str4wberry:
„Zjednodušeně řečeno se {$promenna} nahradí za <?php echo $promenna; ?> “
Možná by bylo dobré tolik nezjednodušovat a říct, že v závislosti na kontextu může z {$promenna} vzniknout např. <?php echo escapeHtml($name, ENT_NOQUOTES); ?> . A to je právě věc, která by se reguláry neřešila moc dobře...
|
||
RastyAmateur Profil |
#4 · Zasláno: 6. 2. 2016, 11:06:19
Str4wberry:
No právě. Nahrazení proměnných je jednoduché, ovšem jak na cykly a podmínky? Alphard: Tento šablonovací systém bych využíval jen já. Není důležité ho nějak extrémně zabezpečovat (pokud jsem správně pochopil Vaši reakci). |
||
final_ Profil * |
#5 · Zasláno: 6. 2. 2016, 11:19:12
Dajú sa takým štýlom spraviť aj cykly, podmienky, ale je to naozaj dosť krkolomné. Ak chceš nechaj mi tu na seba e-mail a po víkende ti pošlem link na moje riešenie. Upozorňujem ale, že to nemusí byť správne riešenie(ani nie je).
|
||
Alphard Profil |
#6 · Zasláno: 6. 2. 2016, 11:38:10
RastyAmateur:
„Tento šablonovací systém bych využíval jen já.“ I jako jediný uživatel někde v intranetu? Šablonovací systém je kompilátor a kompilátory se typicky skládají z několika vrstev, které budou přítomné i tady. Začíná se lexikální analýzou a parsováním, při kterém se postupně načítá vstup a na základě definované gramatiky se vytváří vnitřní reprezentace kódu. Jeho jednotlivé fragmenty se nazývají tokeny a z nich se vytváří syntaktický strom (stromový graf). Ve chvíli, kdy je vstup takto zpracovaný, se začně syntakticý strom procházet a jednotlivé uzly se začnou definovaným způsobem transformovat a zapisovat na výstup. Např. Latte\Parser je na github.com/nette/latte/blob/master/src/Latte/Parser.php. Pokud si to chce někdo vyzkoušet, doporučil bych napsat si matematický parser a kalkulačku, ani to není triviální. final: „Ak chceš nechaj mi tu na seba e-mail a po víkende ti pošlem link na moje riešenie.“ Nic ve zlém prosím, ale jestli chceš někoho učit, jak vytvářet šablonovací systém pomocí regulářů, radši to nedělej :-) |
||
RastyAmateur Profil |
#7 · Zasláno: 6. 2. 2016, 11:46:12
final:
Klidně to můžeš někam nahrát a hodit sem odkaz. Rád se na to podívám. Alphard: Děkuji za vysvětlení. Vydím to tak, že se asi naučím s Latte nebo Smarty. Zná někdo ještě jiné šablonovací systémy? Smarty mi přijde na mé malé projekty zbytečně moc dokonalý. |
||
Kubo2 Profil |
Najjednoduchší šablónovací systém by vyzeral možno takto:
function vyparsovaťŠablónu($súbor, array $parametre = []) { return str_replace( array_map(function($názov) { return "{\$$názov}"; }, array_keys($parametre)), array_values($parametre), file_get_contents($súbor) ); } Na tému šablónovacích systémov by som sa najradšej rozpísal viac, no na virtuálnej klávesnici môjho smart fónu to žiaľ nie je veľmi pohodlné. A za mňa tiež odporúčam Latte, prehľadná syntax a vysoká rýchlosť, mám s ním dobré skúsenosti. Narozdiel od Smarty, kde minimálne tá syntax teda nie je nič moc. |
||
Str4wberry Profil |
#9 · Zasláno: 6. 2. 2016, 16:26:14
Nejjednodušší nahrazení {$proměnných} v šabloně používá tato diskuse. :–)
Zjednodušeně: function sablona($soubor) { $tpl = file_get_contents($soubor); return eval("return <<<EOT\n$tpl\nEOT;\n"); } Používat to ale moc nedoporučuji. |
||
RastyAmateur Profil |
#10 · Zasláno: 6. 2. 2016, 16:37:44
Kubo2, Str4wberry:
To nahrazení proměnných není tak těžké. Mně jde o to, jak udělat podmínku a foreach. To jsou asi 2 věci (nepočítaje proměnné), bez kterých to nemá cenu dělat... |
||
Krakatoa Profil |
#11 · Zasláno: 6. 2. 2016, 23:43:39
RastyAmateur:
Šablonování se tu řešilo už několikrát. Nějak nechápu co řešíš, prostě udělej proměnné jako proměnné, podmínky jako if a foreach jako foreach normálně v php kódu. Mně se líbí tento jednoduchý hezký příklad (Raw PHP): vkládání meta tagů pomoci php |
||
Časová prodleva: 9 let
|
0