« 1 2 »
Autor Zpráva
Buddy
Profil *
Dneska jsem tu řešil drobný problém s P.E.T. template enginem pro php. Přes den jsem hledal nějaký schopnější šablonovací systém, ale rád bych se zeptal těch, co nějaký používají, jaký systém vám vyhovuje a proč?

Na tom P.E.T. se mi loíbí, že je malinkej a jednoduchej, umí toho sice málo, ale víc asi ani není potřeba (i ty podmínky, které jsem chtěl jsou asi zbytečné). Ale chtělo by to aspoň možnost dynamicky měnit soubor, který includujete do šablony.

Pak jsem narazil na zajímavý systém Template Power, který se mi zatím zdá taky fajn. Pak htmltmpl taky nevypadá špatně...No a pak Smarty, který mi ale přijdou zbytečně rozsáhlý a veliký. spoustu funkcí nevyužiju a celkově nevím... Jak jste na tom vy? Rád se nechám poučit, zatím se šablonama spíše začínám :)
fandaa
Profil
Buddy
Před nějakou dobou jsem si hrával s JoresTemplate. Jednoduchý šablonovací systém od českého autora (tady na diskusi vystupuje jako Joker). ;-)
Buddy
Profil *
Ten vypadá taky celkem zajímavě,díky za tip!
blizz_boz
Profil
v PHP pouzivam vlastny template engine uploadol by som ho na net ale ajtak by si z toho nic nemal, bo by som ta najprv musel naucit ako sa s nim pracuje
AM_
Profil
Mám teď velmi dobrou zkušenost se Smarty - umožňuje prakticky vše, od základního vkládání proměnných přes cykly, podmínky až po různé vychytávky jako generování různých formulářových prvků, escapování různých formátů (url, javascript, html...) atd. Variabilita funkcí je obrovská a zřejmě je i dobře rozšiřitelný (zatím jsem nepotřeboval).
Šablony se automaticky kompilují a generují se z nich PHP skripty, takže rychlost zpracování je značná.
A hlavně je velice snadný na pochopení a intuitivní.
Nox
Profil
Buddy
Já používám...PHP? Syntaxe je skoro stejná jako u Smarty, když si doplníš cachování a když si dáš na hotkey <?php echo $tx["|"]?> tak je to vkládání skoro stejně rychlý
Oddělení aplikační a prezentační vrstvy? Jasně...přece nejdřív si zpracuji data, dám je do pole a teprve až je všechno tak vložím do html, stejně jako u šablonovacích systémů
S kvalitním cachování bych řekl, že je to stejně nejrychlejší varianta...
Jasně, Smarty syntaxe je trochu hezčí, líp to v tom html vypadá, to u mě zatím nepřevážilo
To že je molochoidní jsem také mnohokrát slyšel, když jsem procházel web
Mastodont
Profil
nejdřív si zpracuji data, dám je do pole a teprve až je všechno tak vložím do html
Jde to i bez toho pole, přímo injektáž z db resultu do HTML.
Joker
Profil
Buddy
Já koukal na Smarty, ale to mi přišlo strašně složité a zbytečně rozsáhlé.
Takže jsem nejdřív používal FastTemplate- docela jednoduchý šablonovací systém, který se chlubil svou rychlostí. Jenže ten skript obsahuje pár chyb a navíc mi dost chyběl třeba blok v bloku (hodně užitečné třeba pro dynamické tabulky) a další vlastnosti.

Nakonec jsem si jako takové "cvičení" udělal vlastní systém. Myšlenkově vyšel z FastTemplate, ale kód je udělaný odznova a má větší možnosti. Hodně mě potěšilo, když jsem udělal benchmark a zjistil, že je (hlavně pro složitější šablony) dokonce rychlejší, než původní FastTemplate :-) (poznámka: aktuální verze může ovšem být pomalejší než ta testovaná, protože má některé vlastnosti navíc).

fandaa
Před nějakou dobou jsem si hrával s JoresTemplate.
No né :-)

Mimochodem, stále platí: Když to budete zkoušet a najdete chyby nebo náměty na zlepšení, uvítám, když mi o nich dáte vědět.

Nox
Oddělení aplikační a prezentační vrstvy? Jasně...přece nejdřív si zpracuji data, dám je do pole a teprve až je všechno tak vložím do html, stejně jako u šablonovacích systémů
To má ale taky některé problémy. Jak se třeba udělá dynamický seznam nebo tabulka, aniž by se zamotalo PHP a HTML?
ninja
Profil
Smarty je urcite dobra varianta. Kdo nechce, nemusi pokrocilejsi moznosti vyuzivat. Je to ale dobre zdokumentovany a otestovany sablonovaci system, do ktereho existuje velke mnozstvi sikovnych pluginu.
Nox
Profil
Joker
No 100% to nebude...nejsem si úplně jistý co tím myslíš, ale...v šablonách se motá pseudojazyk a HTML, v tomto by se motalo PHP a HTML...
Když sem má kodér naučit
{foreach from=$myArray key=k item=v}
   {$k}: {$v}
{/foreach}
nebo
<?php foreach($myArray as $key => $v) echo "$k: $v"?>
už moc velký rozdíl nevidím
ninja
Profil
Nox: opravdu nevidis?

Smarty:
<ul>
{foreach from=$polozky item=polozka}
  <li>{$polozka|escape:'html'}</li>
{foreachelse}
  <li>vytvorte prvni polozku</li>
{/foreach}
</ul>


PHP
<ul>
<?php
if (is_array ($polozky))
  foreach ($polozky AS $polozka)
    echo ('<li>'.htmlspecialchars($polozka).'</li>');
else
  echo ('<li>vytvorte prvni polozku</li>');
?>
</ul>
AM_
Profil
Já koukal na Smarty, ale to mi přišlo strašně složité a zbytečně rozsáhlé.
Tím, že je to rozsáhlé (zbytečně jak pro koho, asi málokdo využije všechny funkce), vzniká zdání, že je to složité. Taky jsem si to nejdřív myslel, ale když jsem se to rozhodl zkusit, během deseti minut jsem měl první šablonu na světě. A cokoliv jsem pak potřeboval dělat složitějšího, jsem velmi rychle dohledal.

Samozřejmě se šablony dají nahradit prostě PHP, výhody šablonového enginu jsou:
- syntaxe je o něco jednodušší a stručnější - mě osobně přijde smarty přehlednější než šablonování přímo PHP
- má některé užitečné vestavěné funkce (ikdyž ty si teoreticky můžete napsat sami)
- kód je snáze pochopitelný pro ne-programátora, tvorbu šablony (nebo alespoň úpravu v plné šíři) by měl zvládnout i designér

Myslím, že šablonovací systém buď robustní nebo žádný - nějaké parodie které umí ve smyčce vypisovat pole a to ještě s chybami kód akorát zpomalí, znepřehlední a zanesou do něj zbytečnosti.
Joker
Profil
Nox
v šablonách se motá pseudojazyk a HTML
Mluvím o tomhle- například šablona pro dynamickou tabulku:
PHP zhruba nějak takhle:
<table id="mojetabulka">
<?php foreach($stranka["tabulka"] as $radky){ ?>
  <tr>
    <?php  foreach($radky as $radek){ ?>
      <td id="<?php echo($radek["id"]); ?>"><?php echo($radek["obsah"]); ?></td>
    <?php } ?>
  </tr>
<?php } ?>
</table>


JoresTemplate:
<table id="mojetabulka">
  <!-- JTPL: START BLOCK: radky --><tr>
    <!-- JTPL: START BLOCK: bunky --><td id="{BUN_ID}">{BUN_OBSAH}</td><!-- JTPL: END BLOCK: bunky -->
  </tr><!-- JTPL: END BLOCK: radky -->
</table>
Mastodont
Profil
Joker
Nebylo by v tom prvním případě náhodou lepší zapnout output buffering a všechno echovat, než takhle pořád přepínat mezi PHP a HTML?
AM_
Profil
Mastodont
Možné určitě, lepší spíš ne.
Jasně, pokud něco chceš udělat rychle a je ti jedno, jak to bude vypadat, tak jo. Ale když všechno rovnou tlačíš na výstup, tak se ti PHP a HTML teprve zamotá do sebe - pokud to myslíš s tvorbou webových aplikací vážně, tak to není řešení.
Joker
Profil
Mastodont
Nebylo by v tom prvním případě náhodou lepší zapnout output buffering a všechno echovat, než takhle pořád přepínat mezi PHP a HTML?
Asi jo, já to psal prostě jako šablonu, kde "šablonovací značky" nahradím PHP. Ale výsledek by to stejně moc nezměnilo.
Navíc, pak by už vzniklo čisté PHP, tím se ztrácí výhoda, že samotná šablona je vpodstatě HTML kód plus pár řídicích konstrukcí.
Už zbývá udělat jen další krok úvahy: "na co dva PHP skripty předávající si mezi sebou pole, když můžu mít jeden a ušetřím to pole." a jsem zase na začátku :-)

AM_
Myslím, že šablonovací systém buď robustní nebo žádný - nějaké parodie které umí ve smyčce vypisovat pole a to ještě s chybami kód akorát zpomalí, znepřehlední a zanesou do něj zbytečnosti.
To je otázka- jednoduchý šablonovací systém má potenciál být rychlejší, než složitý.
Navíc složitý šablonovací systém může být kontraproduktivní v tom, že vyžaduje další znalosti. To je třeba problém se Smarty, že místo abych si práci zjednodušil, potřebuju se k PHP a HTML ještě naučit Smarty syntaxi. V tom mi přijde výhoda jednodušších, jako je třeba i JoresTemplate, že stránka je vlastně jen HTML kód s několika konstrukcemi navíc. Prezentační logiku zvládne upravit i někdo, kdo o šablonách v životě neslyšel a vyzná se jen v HTML. Pokud by takový člověk chtěl šablonu i vytvořit, veškeré potřebné znalosti by se vešly tak na tři řádky textu.
Krom toho, někdy je dokonce záhodno, aby šablonovací systém tak mocné funkce neměl, respektive aby kodér nefušoval do práce programátorovi. To je problém třeba s čistým PHP, že tam za prvé musí znát PHP programátor i kodér a za druhé si pak kodér v šabloně může naprogramovat skoro cokoliv.
AM_
Profil
Právě to je to, když ve smarty nepoužiješ složitější konstrukce, jako by tam nebyly - nemusíš se nic učit, co dělá {$promenna} pochopí každý, a do začátku vlastně nic jiného nepotřebuješ. Jednoduchý a složitý, leč dobře napsaný systém se liší jako pět tisíc a pět miliónů na účtě - pět miliónů je každopádně lepší, je už na tobě, kolik si z nich vybereš, ale máš je tam...
Co se týče rychlosti, tak vzhledem k tomu, že se automaticky kompiluje na PHP skripty, které se cashují troufám si říct, že oproti jiným je rychlejší než blesk - protože ve smarty parser se spustí po úpravě šablony jednou a pak už jen čisté PHP, těžko ho kdy předhoní engine, který tuto funkci nemá.
joe
Profil
ninja
<ul>
<?php
if (is_array ($polozky))
foreach ($polozky AS $polozka)
echo ('<li>'.htmlspecialchars($polozka).'</li>');
else
echo ('<li>vytvorte prvni polozku</li>');
?>
</ul>


Jde napsat daleko lépe:

<ul><?php foreach($items as $item) echo "<li>$item</li>"; ?></ul>

Podle mě, je dobré používat jen PHP s cachováním. Nevím proč se učit další syntaxi, která k ničemu není a akorát si ztížíte práci. Mně nepřijde ten můj zápis o nic horší, než zápis s použitím například Smarty, jen je vhodné připravit data v modelu a ne až ve view - odpadají tedy podmínky, jestli to je skutečně pole a htmlspecialchars. Prostě se jen vypíše pole pomocí foreach.
Mastodont
Profil
Joker, AM_
Není nutné echovat přímo na výstup, když je zapnut buffering, můžeš výstup postupně vybírat a ukládat.
Namísto $radek["id"] lze použít $id, stačí po načtení řádku z resultu zavolat extract.
AM_
Profil
Namísto $radek["id"] lze použít $id, stačí po načtení řádku z resultu zavolat extract.
ale to povede k tomu, že budeš mít za chvíli stovky proměnných - jen ať zůstanou pěkně uspořádané v asociativním poli, pak víš, k čemu co patří.

Není nutné echovat přímo na výstup,
Ono je spíš rozdíl buď generovat dokument za běhu skriptu (prostě píšu <html><head> a kde potřebuju nějakou hodnotu, tam si jí spočtu) a nejdřív si připravit hodnoty a z nich jako poslední fázi sestavit výstup.
Mastodont
Profil
AM_
budeš mít za chvíli stovky proměnných
Nebudeš, ty použiješ jen v jednom místě, něco jako:
ob_start();
while ($row = mysqli_fetch_assoc($result)) {
        extract($row);
        echo "<h2>$title</h2><div style=\"intro\">$intro</div><div style=\"content\">$content</div>";
}
$block = ob_get_contents();

Tu šablonu samozřejmě můžeš includnout ze samostatného souboru.
Joker
Profil
AM_
Jednoduchý a složitý, leč dobře napsaný systém se liší jako pět tisíc a pět miliónů na účtě
Já bych spíš řekl jako autobus a auto. Autobusem taky lze odvézt tři lidi a to zbývající místo nemusím použít :-)

co dělá {$promenna} pochopí každý, a do začátku vlastně nic jiného nepotřebuješ
Pokud se omezím jen na tohle, je vpodstatě jedno, jaký šablonovací systém zvolím. Když budu chtít o trochu složitější věci, bude výhodnější ten jednoduchý šablonovací systém. Když budu chtít ještě složitější věci, bude naopak lepší ten složitý.
Nakolik jsem já dělal šablony, obvykle potřebuju tři věci: proměnné, vložení šablony do jiné šablony a opakující se kus kódu. Na další úrovni pak zobrazení a skrývání určitých bloků za určitých podmínek. A to je řekl bych právě ten případ, kdy jednodušší systém funguje docela dobře.

joe
Mně nepřijde ten můj zápis o nic horší, než zápis s použitím například Smarty
Já osobně nemám rád HTML uvnitř PHP echo. Už proto, že se to špatně čte a zvýrazňovač v editoru to neoznačuje jako HTML kód, ale jako PHP řetězec.

Mastodont
Jenže ten kód už míchá výstup s vytahováním dat z databáze. A když budu mít v šabloně těch proměnných víc, začne se to motat.
Mastodont
Profil
Joker
Ano míchá, protože když vím, že data půjdou třeba do tabulky, tak proč nejdřív z resultu vytvářet pole a to pak v druhém cyklu cpát někam do šablony. Stačí jeden cyklus.
joe
Profil
Joker
To já taky ne, tohle byl jen příklad. Taky to normálně píšu jako HTML a pak otvírám PHP tam, kde potřebuju. Jen jsem tím chtěl říct, že používání nějakých šablonovacích systémů je pro mě zbytečné (o to víc, když se o web starám jenom já sám) a pro někoho to může být i přehlednější než právě nějaká jiná syntaxe. Navíc dneska už umí PHP plno dětí ze základní školy , takže v tom nevidím problém. Spíš je pro ně na obtíž se učit třeba se Smarty.

Na ten tvůj systém jsem se nedíval, asi ti bude vyhovovat, když sis ho napsal, ale co se mi na první pohled nelíbí je to, že bych ho viděl jako normální komentář v HTML.
tiso
Profil
http://www.massassi.com/php/articles/template_engines/
ninja
Profil
joe:

Jde napsat daleko lépe:
<ul><?php foreach($items as $item) echo "<li>$item</li>"; ?></ul>


Hmm, takze kdyz bude pole $items prazdne, uvidi navstevnik chybovou hlasku. A kdyz bude obsahovat <>, tak pro jistotu neuvidi nic. To uz muzete rovnou vypisovat pomoci:
<?=print_r ($items)?>



Pokud nekdy budete delat vetsi projekt ve vice lidech, poznate vyhody sablon (jakychkoliv). Kod kde je to same echo je znacne neprehledny, svadi k nabouravani modelu MVC a 90% neprogramataru spise pochopi sablony nez PHP. Navic vetsina sablon je znakove daleko uspornejsi a benevolentnejsi.
Joker
Profil
Mastodont
když vím, že data půjdou třeba do tabulky, tak proč nejdřív z resultu vytvářet pole a to pak v druhém cyklu cpát někam do šablony. Stačí jeden cyklus.
No a jsme u toho :o)))
To ovšem popírá tu původní myšlenku, oddělit prezentaci od aplikace. Ale je to regulérní varianta.

joe
Jen jsem tím chtěl říct, že používání nějakých šablonovacích systémů je pro mě zbytečné (o to víc, když se o web starám jenom já sám) a pro někoho to může být i přehlednější než právě nějaká jiná syntaxe.
To je další regulérní varianta.
Holt, jak se říká: proti gustu...

Na ten tvůj systém jsem se nedíval, asi ti bude vyhovovat, když sis ho napsal, ale co se mi na první pohled nelíbí je to, že bych ho viděl jako normální komentář v HTML.
Příkazy šablonovacího systému se při zpracování samozřejmě odstraní, takže ve výsledném kódu nejsou. Ale výhoda (pro mě) je, že i ta vstupní šablona je vpodstatě platné HTML a třeba PSPad ji dokáže správně obarvit, automaticky formátovat, označovat související tagy a podobně.

Pokud nekdy budete delat vetsi projekt ve vice lidech, poznate vyhody sablon (jakychkoliv). Kod kde je to same echo je znacne neprehledny, svadi k nabouravani modelu MVC a 90% neprogramataru spise pochopi sablony nez PHP. Navic vetsina sablon je znakove daleko uspornejsi a benevolentnejsi.
+1
Já na šablony přešel poté, co jsem měl párkrát modifikovat HTML kód, vygenerovaný PHP skriptem přes echo.
Takové věci, jako:
echo("</div>");
...a zkoumání, ke které značce <div> to vlastně patří, když jeden <div> může pokrývat třeba 400 řádků kódu a mezitím se v různých cyklech a podmínkách mohou otevírat a uzavírat jiné <div>y, následované zjištěním, že to nejspíš souviselo s počáteční značkou, kterou jsem před měsícem smazal a vzpomínáním, jestli jsem prostě tu koncovou značku zapomněl smazat, nebo jsem místo toho smazal koncovou značku nějakého jiného <div>u... toho jsem si už užil dost :-)
srigi
Profil
Chalani, videli ste uz ten "DOM based" sablonovaci system. Sablonovanie v style selektorov jQuery. IMHO upna pecka.
Nox
Profil
Asi už tu nikdo neodpoví, ale zkusím to...
Zrovna s kamarádem začínáme projekt a nakonec jsme se tedy pro ten šablonovací systém rozhodli...
Ještě jsem hledal nějaké srovnání a narazil na tuto zmínku, část Nevýhody nezní moc dobře...ale článek je prehistorický a obecně nevím prostě
jestli má autor pravdu (především tedy s tou rychlostí, ty kB si už najdu sám)
http://interval.cz/clanky/smarty-chytre-sablony-pro-php/
Budulinek
Profil
Souhlasím s Jokerem... V kódu samé echo, nezvýrazněná syntaxe, nemožnost dohledání chybějící značky pomocí jednoduchýh "validátorů" např v PSPadu, navíc to míchání do php... Nemluvě o tom, když pracuje na projektu víc lidí, nebo když prostě chcete umožnit uživatelům na webu vybrat si z více vzhledů (nemyslím tím jen změnu barev či pozicování pomocí CSS). Dokonce i když pracuji na projektu sám, oceňuji šablony, protože vím že když otevřu nějaký php soubor, je tam jen php a ne tuny nezvýrazněného HTML kódu, který je uložen jako šablona jinde...

Co se týče smarty, tak ty jsem si moc neoblíbil... Vidím to stejně, jako výše zmíněné tvrzení, že ve srovnání s nějakým menším systémem je to jako auto a autobus. Já osobně mám rád, když si logiku řídím pomocí php a do šablon vkládám jen proměnné, smyčky a smyčky uvnitř smyček a načítání šablony v šabloně. Nic víc myslím není potřeba a naučit se tři nebo čtyři "značky" zvládne i cvičená opice.

U smarty ta syntaxe není taky nijak těžká, ale přijde mi, že pro kodéra a celkově pro šablony je to až moc silný nástroj a tyhle věci radši řeším v php, než v šabloně...
« 1 2 »

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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