Pri programovaní v PHP som narazil na template systémy a po surfovaní na nete som našiel mnohé z nich väčšinou podobné ako Smarty... Avšak v rôznych fórach boli príspevky aj od odporcov týchto template systémov, jeden z argumentov proti mnohým týmto systémom bol názor, že načo treba ďalší špeciálny jazyk na templaty, keď samotné PHP je niečo podobné... Samotné diskusie a príspevky v nich boli niekoľko rokov staré, čo vyzerá ako by Smarty pomaly upadalo... Neviem ako je to s ostatnými.
Potom som po ďalšom surfovaní som narazil na XML/XSL(T), ktoré je definované samotným w3c a vyzerá to tak že XML/XSL(T) sa dá použiť ako template systém.
Zaujímalo by ma či je v dnešnej dobe efektívne využívať template systémy typu Smarty alebo radšej používať XML/XSL(T)? Alebo je to jedno? Tiež by som chcel vedieť v čom sú výhody použitia, či sa to používa a ak prečo sa používa práve tento spôsob...
Fórum › XML / XSL(T)
XML/XSL(T) vs template systemy
Nevim jake presne XML myslis ty, ja jsem neco takoveho zkousel uz pred nejakou dobou a problem byl, ze to bylo hrozne pomale - proste mi parsovani vetsich objemu dat XML phpku moc nechutna. Dalsi vec je, ze takova sablona potom musi byt 100% XML korektni, jinak parsovani selze. A navic ten defaultni parser neumel cestinu.
Mám na mysli toto:
1. nech PHP scripty generujú svoj výstup v XML formáte
2. nech mám xsl súbor (šablonu)
3. nejaký PHP script alebo prehliadač (tým prehliadačom si úplne nie som istý) spojí xml+xsl a vytvorí html súbor, ktorý zobrazí prehliadač
Čiže xls súbory by reprezentovali šablonu...
Je to rovnako dobré ako napríklad Smarty? dá sa to použiť, resp. skúšal to niekto?
Ešte, keď už som začal... Prečo vlastne existujú PHP template systémy? Predpokladajme, že mám vytvorený script s PHP logikou, premenné v tomto scripte uložím ako globálne alebo ich proste nejako vytiahnem z funkcií a na konci tohoto súboru zavolám: include("šablóna.php");
V súbore šablóna budem mať html kód ktorý sa bude zobrazovať a premenné budem vypisovať: <tag><?php echo $premenna ?></tag>
Nepoužil som teda žiadny template systém a zdá sa mi, že to má rovnaký efekt... Keď sa to dá spraviť takto, prečo niekto programuje template systémy? Nie je to zbytočné komplikovanie?
K hlavnej otazke topicu sa nevyjadrim, iba toto chcem:
Keď sa to dá spraviť takto, prečo niekto programuje template systémy? Nie je to zbytočné komplikovanie?
Neviem ako by si tymto stylom vyriesil zobrazovanie informacii z cyklov.. Co je dost casto pouzivana vec.
Napr. by si tahal z databazy zoznam pdnikov a informacii o nich a vypisoval do prehladnej tabulky (ktoru pouzivaju aj ine skripty)
To by si si musel pre kazdy riadok vytvarat zvlast premenne alebo vytvarat pole... lenze to by si zas potom nevedel urcit kolko treba riadkov tabulky v sablone a pod.
Dalej mozem spomenut spajanie premennych do skupin ktore sa posielaju do templatu, spajanie viacerych templatov na stranke, a hlavne jednoduchost , prehladnost celeho projektu, oddelenie PHP od HTML - cize to preco sa pouzivaju templates, a mnoho dalsich sofistikovanejsich moznosti.
Ale pravda je ze to naozaj spomaluje generovanie stranky na serveri.
lubo
Zaujímalo by ma či je v dnešnej dobe efektívne využívať template systémy typu Smarty alebo radšej používať XML/XSL(T)?
Podle mě se vyplatí XML/XSL(T) používat u „méně dynamických“ jazyků než je PHP – tedy např. v Javě apod.
A Smarty se mi zdá zbytečné používat, protože se stejně šablony „kompilují“ do embed PHP příkazů, takže je podle mě je lepší využívat rovnou jich. Použítí Smarty má samozřejmě i výhody. Hlavně je, co se vypisování proměnných týče, méně „ukecané“ než rovnou psát embed PHP příkazy ({$promenna} vs. <?php echo $promenna; ?>, nebo např. {$promenna | upper} vs. <?php echo strtoupper($promenna); ?>).
Osobně jsem Smarty nikdy na něco většího nepoužil. Zkusil jsem, ale děkuji, nechci.
Prečo vlastne existujú PHP template systémy?
Podle mě to bylo velým hypem okolo oddělování aplikační a prezenční logiky. Tak si někteří usmyslili, že nejlepší bude ještě nad PHP naroubovat nějaký pseudojazyk, který se o to bude starat. Dnes se od toho snad upouští, protože mnoho lidí zjistilo, že je to prakticky k ničemu.
V súbore šablóna budem mať html kód ktorý sa bude zobrazovať a premenné budem vypisovať: <tag><?php echo $premenna ?></tag>
Když už, tak bych se vyhnul globálním proměnným. Mnohem elegantnější se mi zdá kupř.:
function render_template($file, $context)
{
extract($context);
include $file;
}
dalaman
oddelenie PHP od HTML
Tohle bych řekl, že je další problém v uvažování některých lidí. Když se poví „oddělení aplikační a prezenční logiky“, hned si pod tím představí, že PHP a HTML musí jít dáleko daleko od sebe. Ale to není pravda. Hlavní je oddělit jádro aplikace („kóntroléry“ a „módely“) od výstupu do HTML. Ale jazykem, kteří může výstup do HTML řídit, který může HTML skládat, stále může být PHP.
bukaj
Ak by som teda oddelil php súbory s logikou a vzhľadom aplikácie a použil napr. tebou načrtnutú funkciu alebo nejaký iný spôsob ako dopraviť premenné, vlastne informácie do stránky, takže nepoužijem template systém, bude stránka rýchlejšia ako s použitím template? (keď si to tak spätne čítam pripadá mi to, že vlastne chcem niečo ako template ale ručne napísané v php)
Inak zdá sa mi, že niekedy snahy ľudí písať najkratšie zdrojové kódy sú až príliš prehnané :-) Povedzme, že Smarty forma je menej ukecanejšia, áno {$premenna} je skutočne kratšie ako <?php echo $premenná ?> ale je to potrebné až tak skracovať? Keď som písal v JavaScripte nejaké veci, tak som skutočne niekedy nadával, že príkaz document.getElementById(); by mohol byť kratší, ale v konečnom dôsledku som ladením chýb a najmä ich hľadaním strávil viac času ako písaním scriptu (niekedy to hľadanie je veľmi ťažké)... Myslím, že s PHP je to podobné, nemalo by podľa mňa až tak záležať na tom, či je to dlhšie alebo kratšie, ale skôr čitateľnosť, teda keď sa na to pozriem, aby som vedel čo to robí, a to záleží aj na programátorovi (pomenovanie premenných, odsadzovanie...), čiže zmena syntaxe nemusí znamenať zlepšenie čitateľnosti a nemala by podľa mňa byť až taká dôležitá pri rozhodovaní či použiť template alebo nie
A ešte jedna vec. Ako oddeľujete vzhľad a logiku stránky od seba? Ak by sa dalo mohli by ste napísať aj krátke príklady, dosť ma táto téma zaujala (veď kto by nechcel písať elegantný kód?) Ale to je asi nad rámec tohoto threadu :-)
lubo
takže nepoužijem template systém, bude stránka rýchlejšia ako s použitím template?
To si bude chtít najít nějaké benchmarky na internetu. Ale podlě mě, čistě logicky, by to bez Smarty rychlejší být mělo. I když odhlédneme od toho, že se šablony stejně cachují „zkompilované“ do PHP, pořád by se muselo znovu a znovu načítat Smarty – zátěž navíc.
lubo document.getElementById();
Pouzij prototype nebo jQuery, oboje to zkracuji na $ (plus u jQuery jeste musis pridatdo hornoty krizek).
lubo A ešte jedna vec. Ako oddeľujete vzhľad a logiku stránky od seba? Ak by sa dalo mohli by ste napísať aj krátke príklady, dosť ma táto téma zaujala (veď kto by nechcel písať elegantný kód?) Ale to je asi nad rámec tohoto threadu :-)
Ukazu to reba na priklade tabulky. Klasicky pristup je takhle:
echo "<table>";
while($result=mysql_fetch_object($response)){
?>
<tr><td><?=$result->poleA?></td><td><?=$result->poleB?></td><td><?=$result->poleC?></td><td><?=$result->poleD?></td> </tr>
<?
}
echo "</table>";
Sablonovy pristup je pak takto:
$table=new Table("nazevsablony");
while($result=mysql_fetch_object($response)){
$table->addRow($result->poleA,$result->poleB,$result->poleC,$result->poleD);
}
A takhle jde delat s kvalitnim sablonovym systemem skoro vse. A to je prave to oddeleni logiky od prezentace. Samozrejme ze to bude na vykon o neco slabsi nez kdyz bys to delal rovnou, ano je to dalsi kod navic. Nezpoem ale na to, ze cas programatora je vetsinou podstatne drazsi nez cas stroje ;)
Neco jsem na harddisku vyhrabal - to je to, co jsem si ja predstavoval pod XML sablonovym systemem. Do HTML sablony se melo pridat nekolik dalsich tagu, ktere mely urcovat podobu vysledne stranky. Tagy zahrnovaly hlavne datove vstupy a definice cyklu a podminek.
Tady je zakladni sablona (zatim velice jednoducha, v budoucnu by tady byl nadefinovany layout):
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title><mzdata id="title" /></title>
</head>
<body>
<h1>My uber websiteěščřžýáíé</h1>
<hr />
<mzinclude id="page" />
</body>
</html>
Obsah page se mel sestavovat z mensich kousku. Zde je napriklad jednoduchy objekt Article.<mzobject name="article">
<h2><mzdata id="name" /></h2>
<small>By: <mzdata id="author_name" /></small>
<p class="subtitle"><mzdata id="subtitle" /></p>
<p><mzdata id="content" /></p>
</mzobject>
A tady to zacina byt zajimavejsi - vstupuji zde do hry cykly a podminky.<mzobject name="form">
<form action="" method="" class="formatted_form" mzvar="form:action,method,class">
<mzloop id="fieldsets">
<mzcondition id="fieldset_cond" parent="fieldsets" />
<mzbranch condition="fieldset_cond" value="fieldset" parent="fieldsets">
<fieldset name="" title="" mzvar="fieldset:name,title">
<legend><mzdata id="fieldset_legend" parent="fieldsets"></legend>
<mzloop id="fields" parent="fieldsets">
<label for="" mzvar="label:for">
<mzdata id="field_label" parent="fields">
<mzcondition id="asterisk_cond">
<mzbranch condition="asterisk_cond" value="1">
<strong class="asterisk">*</strong>
</mzbranch>
</mzcondition>
</label>
<mzcondition id="field_cond">
<mzbranch condition="field_cond" value="input">
<input type="text" name="" maxlength="40" accesskey="" value="" mzid="input" mzvar="type,name,accesskey,value" /> <?=red(@$error["jmeno"]) ?>
</mzbranch>
<mzbranch condition="field_cond" value="select">
<mzobjectinclude>
</mzbranch>
</mzcondition>
</mzloop>
</fieldset>
</mzbranch>
</mzcondition>
</mzloop>
<input type="submit" name="odeslat" class="odsadit" accesskey="S" value="Zaregistrovat se a odeslat objednávku!" title="Klepnutím na toto tlačítko vložíte své údaje do databáze a Vaše objednávka bude ihned odeslána ke zpracování" />
</form>
</mzobject>
To co jsem se postnul myslim vicemene funguvalo. I pri naprosto zakladnich ulohach jsem se ale dostaval k zpracovavacim casum, ktere proste nebyly unosne. Slepa ulicka evoluce.
Dalsi nevyhodou, kterou jsem uz zminoval, byla nepodpora cestiny. Nevim co by to udelalo v UTF, win1250 to ale nedavalo.
Ted si jeste vspominam na jednu nevyhodu - nesly vkladat dynamicke hodnoty do parametru, aniz by se narusila validita XML.
Myslim, ze to je presne to co bukaj myslel "jazykem nad PHP" :)
CommanderZ
Sablonovy pristup je pak takto:
table=new Table("nazevsablony");
while($result=mysql_fetch_object($response)){
$table->addRow($result->poleA,$result->poleB,$result->poleC,$result->poleD);
}
Zaujímavé, celkom sa mi to páči :-) Je to z nejakého konkrétneho template systému alebo ukážka? Mohol by si napísať jeho meno? (dosť rád by som sa s takým niečím pobavkal)
Ten priklad jsem spatlal na kolene. Neco velmi podobneho pouzivame v praci, to je ale interni. Neco podobneho ti ale nabidne Zend Framework nebo myslim ze i Nette (ta to ma rozhodne pro formulare, pro tabulky nevim).
Ale co si budeme povidat - takovou tridu se zakladni funcionalitou by nemel byt problem spatlat behem dvou hodin ;)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
XML + XSL a čeština — založil mbe
Použitie XSL na transformáciu XML na HTML — založil eswes
NetBeans a xsl — založil vlado0991
Vložení XSL do stylopisu CSS — založil cheeester
Template class dedi template class — založil vitamin
Moderátoři diskuze