| 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: 10 let
|
|||
0