48 komentářů k článku Nette Framework: Chytré šablony:

  1. Mastodont

    Syntaxe
    … Pokud by proměnná obsahovala HTML kód a chtěli bychom ji vypsat bez jakékoliv trasformace, stačí přidat vykřičník: {!$item->name}. …

    Tipnul bych si, že většina programátorů si pod tímto zápisem představí úplně něco jiného než vypnuté escapování. A to je IMHO největší problém u D.G. – on naprosto kašle na logiku syntaxe, viz Texy, která je totálním galymatyášem nejrůznějších typů závorek apod.

    Co třeba noescape($item->name) .. nebo filtr @@$item->name | noescape@ ..

    1. v6ak

      Re: Syntaxe
      Toto je dost sporná věc. Už proto, že kdo používá CBF, ten bude většinou chtít vypisovat obsah proměnných a ne negovat boolean a vypisovat v surovém stavu (bez převodu na ano/ne apod.).
      Ale je pravda, třeba taková dvojtečka (to mě tak letmo napadlo) by byla asi lepší.

    2. RuDa

      Re: Syntaxe
      Já zase docela chápu, proč je tam ten vykřičník. Když udělám šablonu pro šéfa, který si ji třeba později chce upravit k obrazu svému, tak on pochopitelně nic neví o nějaké negaci, pro něj vykřičník znamená "pozor, (potenciálně) nebezpečná akce" (a přesně to jsem mu také řekl).
      Tzn. v (pod)šabloně může přesouvat, přidávat nebo ubírat vyjmenované parametry (např. {$zbozi->popis} ), jejichž seznam dostal, ale případné vykřičníky musí napřed konzultovat. :-)

    3. Ped

      Re: Syntaxe
      Ja myslim ze idealni sablony nemaji mit s programovanim nic spolecneho (proc, kdyz jde jenom o formu zobrazeni?). Takze ten vykricnik mi v tomhle kontextu nevadi, spis mi vadi ze jako linemu programatorovi se mi nechce ucit dalsi "jazyk" sablon, co znamena ze idealni sablony by meli mit i minimalni syntax (ktera samozrejme umoznuje maximum moznosti).

      Z tohohle letmeho pohledu na sablony Netty to vypada ze se k tomu idealu blizi alespon tak jako jine sablonovaci systemy, i kdyz neni nad zkusenosti z velkeho projektu, tam se teprv ukaze.

      Co by mne osobne zajimalo mnohem vic je reseni podpory prekladu, jak by se pan tvurce Netty vyporadal s touhle ulohou tak aby to bylo pokud mozno efektivni na vsech urovnich, t.j. zatez serveru, srozumitelnost kodu a moznost nechat prekladat stranky lidi kteri o programovani nic nevi a veci jako escapovani & nebo jmena promennych jim nic nerikaji. (ze je naucim neprekladat jmena promennych, s tim se pocita, ale vysvetlovat jim kompletni zaludnosti syntaxe ruznych specialnich znaku nelze, takze idealni system prekladu tyhle veci pred nimi ukryje natolik, aby nemohli nic pokazit)

      Osobne si myslim ze sablony jsou jakymsi prvym krokem k tomuhle idealu, ale zajimalo by mne jak by resil konkretni implementaci takoveho systemu, kdy si uzivatel nastavi ve svem profilu svuj jazyk a pak se mu web zobrazuje ve zvolenem jazyce.

      1. romansklenar

        Re: Syntaxe
        Podpora pro překlady je v Nette taky, volá se zápisem: {_'text to translate'} či {!_'text to translate'}. Co dělá vykřičník, to už asi uhádnete ;)

        Nette ale nikomu nenutí používát nějaké konkrétní translatory/adaptéry, vyžaduje jen, aby implementoval rozhraní ITranslator, takže se dost dobře dá použít i ten ze Zendu, příklady implementace se dají nalést ve fóru. Podpora pro překlady je i ve formulářích, které jsou zmíněny některém z předchozím dílu seriálu.

    4. KLoK

      Re: Syntaxe
      No to je prave dost vyhoda, protoze pro tvorbu sablon nepotrebujete programatora a staci Vam clovek se znalosti html a jednoducheho sablonovaciho jazyka. Pokud muzete plytvat programatorskym potencialem na tvorbu sablon, tak si toho luxusu uzivejte.

      Navic velka cast programatoru je schopna delat ve vice jazycich a tohle jim urcite problem cinit nebude

      A zaverem: neni problem vzit sablonovaci system pana Grudla a prepsat si jeho "CurlyBracketsFilter" na "DoubleAtFilterWithEscapeCalledByFunctionFilter"

    5. Jarda

      Re: Syntaxe
      Ale vůbec ne, ta syntaxe je IMHO vynikající a naprosto snadno přejde do krve.
      Mě osobně přijde podstatně hezčí a lepší než například syntaxe Smarty. Navíc se
      dá CurlyBracketsFilter velice snadno rozšířit o další makra a filtry. Opravdu nevím, proč bych měl psát noescape($item->name) .. nebo filtr @@$item->name | noescape@ – to je úplně psycho :)

    6. v6ak

      Re: Syntaxe
      Ještě dodám, že noescape mi přijde jako nejhorší zde zmíněné řešení – vypadá to jako volání funkce, což není možné zde použít.

    7. Jarda

      Re: Syntaxe
      No a co se týče Texy a údajného galimatiáše – svou matku jsem naučil psát Texy (potažmo tedy validní html/xhtml) během 10 minut (narozdíl od wordu nebo Wysivyg editorů) – a ta opravdu není kodér ni programátor :)

      1. Mastodont

        Re: Syntaxe
        Super, matka jako universální argument :-)))) Tak se zkuste zamyslet, proč se světě rozšířily různé varianty BBCode namísto třeba Markdown – jestli to náhodou nebude tím, že mají jednoduchou a hlavně konsistentní syntaxi.

        1. Jarda

          Re: Syntaxe
          Máma řikala, že BBCode stojí za prd. :-)

          Ne, ale vážně, každý co potřebuje, ale mě přijde Texy syntaxe šitá
          na míru BFU (a mě taky). Zase tolik pravidel tam není, ne? :)

      2. Anonym

        Re: Syntaxe
        Jiste, mne se taky pise mnohem lip v ruznych wiki syntaxich, uz jen proto, ze onen Word skoro neovladam …

        Nicmene je fakt, ze Texy syntaxe je podle me docela zverstvo :/

        1. kulda

          Re: Syntaxe

          Naopak, Texy syntaxe je velmi elegantní. Sám jsem si dělal před pár lety vlastní wiki a vymýšlel vlastní syntaxy, aby byla co možná nejjednodušší… a když jsem pak viděl syntaxi Texy, byla mnohem jednodušší a intuitivnější něž ta moje.

  2. yossarian

    RE: Nette Framework: Chytré šablony
    Ano, aneb nechme program delat neco, co neni explicitne receno, a nedelat to jedine pokud si rekneme. Cesta do pekla^2, neb clovek co pouziva toto v ramci 'zachovani bezpecnosti' bude vedet jeste vetsi lautrhovno o tom, proc je escapovani dulezite a k cemu se zrovna tady pouziva. Fuj.

    1. KLoK

      RE: Nette Framework: Chytré šablony
      A proto ze nekdo nevi k cemu to escapovani je, tak bude lepsi mit nezabezpecenou aplikaci. A neni to cesta do pekel^3?

    2. David GrudlAutor příspěvku

      RE: Nette Framework: Chytré šablony
      Samozřejmě to explicitně řečeno je. V dokumentaci, v tomto článku. {$xxx} vypíše escapovanou proměnnou. Lze to říct explicitněji?

      1. yossarian

        RE: Nette Framework: Chytré šablony
        A ted mi ukazte cloveka, ktery o moznych XSS exploitech nevi, a pritom vi co znamena escapovana promenna.

        Porad si myslim, ze by kod mel delat to co po nem chce programator, a ne delat to, co si mysli, ze by se programatorovi mohlo hodit, potom vznikaji bastly jako Sharepoint od M$.

        Pane Grudl, je pekne ze se snazite zvysit bezpecnost, ale pouze lepite zaplaty na rany aby nebyly videt, misto reseni samotne priciny. (coz priznavam, nebude asi uplne jednoduche, jestli vubec mozne.)

        1. Jarda

          RE: Nette Framework: Chytré šablony
          >Porad si myslim, ze by kod mel delat to co po nem chce programator, a ne delat to, co si mysli, ze by se programatorovi mohlo hodit, potom vznikaji bastly jako Sharepoint od M$.

          A to se tady neděje? Když chci používat šablony, tak je používám ne? Kdyz použiji {$var} tak právě proto, že vím, že $var bude escapovaná a právě proto jsem to použil.
          Nechce se mi psát echo htmlspecialchars($var). Opravdu nějak Váš příspěvěk nechápu.

        2. Borelioza

          RE: Nette Framework: Chytré šablony
          > Porad si myslim, ze by kod mel delat to co po nem chce programator

          A odkud prosím berete přesvědčení, že programátor NECHCE, aby se to automaticky escapovalo? To je nějaký axiom nebo dogma…?

        3. Jarda

          RE: Nette Framework: Chytré šablony
          > Pane Grudl, je pekne ze se snazite zvysit bezpecnost, ale pouze lepite zaplaty na rany aby nebyly videt, misto reseni samotne priciny. (coz priznavam, nebude asi uplne jednoduche, jestli vubec mozne.)

          No a tohle je úplně směšné! Co že nám to tu vlastně sdělujete? Že je pan Grudl lepič záplat? Že je mnohem lepší řešit příčinu? Ale že to možná nejde? A máte pro nás ještě nějaký názor?

        4. David GrudlAutor příspěvku

          RE: Nette Framework: Chytré šablony
          Nepochopil jste princip.

          Je zbytečné se rozčilovat, zkuste si článek přečíst ještě jednou, nebo úplně nejlépe, vyzkoušet si to na svém počítači a rychle pochopíte, jak je řešení příjemné a užitečné.

    3. v6ak

      RE: Nette Framework: Chytré šablony
      Pokusím se rekonstruovat ideu:
      1. programátor/kodér potřebuje proměnný text na základě vnějšího vstupu.
      2. Často je potřeba to nějakým způsobem escapovat.
      3. Obě varianty by si zasloužily trošku zkrátit.

      Jako logické řešení se nabízí tedy k oboum variantám nabídnout kratší varianty a to tak, že se obě budou zapisovat jinak. Sedí?
      Další věcí je, že si o to programátor musí říct sám pomocí CBF, protože nikde není psáno, že to musí chtít vždy.
      Tak co, pokud jsem z toho vynechal syntaxi, vidí na tom někdo něco špatného?

  3. Jakub Vrána

    Kontextově závislé escapování

    Escapování závislé na kontextu je chytré (a v Nette elegantně implementované), opsal to dokonce už i Google :-).

    Pro úplnost bych dodal, že automatické escapování funguje jen v kontextu HTML textu, HTML atributu uzavřeného do uvozovek nebo apostrofů, CSS ve značce <style> a JavaScriptu ve značce <script>. Pokud by nějakého blouda napadlo uživatelský vstup použít třeba na místě názvu HTML značky, tak to fungovat nebude, stejně tak nebude fungovat JS a CSS ošetřování uvnitř atributů style a on* (to už by smysl dávat mohlo, ale lepší je to vyčlenit mimo HTML kód).

    1. David GrudlAutor příspěvku

      Re: Kontextově závislé escapování
      To je dobrá poznámka a váhám, jestli podporu pro style="…" a on*="…" přidat. Asi přidám.

      (S tím Googlem jsi mě dostal. Takže nejenom Microsoft kopíruje Nette ;-)

        1. Jakub Vrána

          Re: Kontextově závislé escapování
          Ještě jsem to trochu upravil. Jednak to nebylo HTML kompatibilní kvůli case-sensitivitě atributů a jednak se to nechalo chytit na známý chyták <p title=">">, kde > uvnitř ohraničené hodnoty atributu neukončuje značku.

          1. David GrudlAutor příspěvku

            Re: Kontextově závislé escapování
            Díky, teď se může jít Google klouzat ;))

            ps. Taky bych se šel klouzat. Kde se dá jít v tuhle roční dobu klouzat?

  4. danaketh

    RE: Nette Framework: Chytré šablony
    Já si myslím, že pokud to situace/rozpočet dovoluje, tak by šablony měl dělat někdo jiný ale ne programátor. Ten by se měl soustředit na aplikaci jako takovou a kodérovi šablon pak jen předat seznam proměnných nebo se s ním předem dohodnout co mu bude posílat.

    Kodér přece nepotřebuje vědět o nějakém XSS, escapování a bůhví o čem ještě. Potřebuje znát HTML a syntaxi Nette šablon… Pak mu stačí říct, že když přidá před proměnnou !, vypíše se mu čisté HTML. Osobně považuji XSS, stejně jako SQL Injection a další možné útoky, za záležitost aplikace a programátora. Šablona je pouze výpis dat, sama o sobě už nemá nic ošetřovat, jen vypsat co dostane. Ošetřit to má aplikace.

    Nette data implicitně ošetřuje a je to tak správně. Představte si, že předáte šablony někomu jinému a on by tam místo {!$var} našel nějakou šílenost… Zabije vás :) Takhle mu stačí říct, že ! vypíná escapování, případně mu ukázat co tím je myšleno. Hotovo, tečka.

    Šablony jsou přece k výpisu dat, ne k dalšímu programování…!

    Ikdyby David nakrásně vymýšlel zcela nová pravidla programování, převracel PHP vzhůru nohama a tvrdil, že nejlepší webovky uděláte Assemblerem, tak je to jeho věc. Nikdo vás Nette používat nenutí.

    BTW: Nedávno jsem se ucházel o práci v jisté firmě a mezi požadavky byla znalost Nette frameworku. Takže buď tam zaměstnávají tupce nebo Nette opravdu má něco do sebe ;)

    Kdyby se každý držel zaběhlých postupů tak urputně jak to tu někteří předvádějí, tak ještě dneska sedíme v jeskyni a šutrem škrábeme obrázky na její stěnu :))

    1. Martin Hassman

      RE: Nette Framework: Chytré šablony
      Nedávno jsem se ucházel o práci v jisté firmě a mezi požadavky byla znalost Nette frameworku.

      A bude hůř, to je jen začínající trend (nemyslím konkrétně jen Nette, ale obecně frameworky nebo pomocné nástroje).

      1. danaketh

        RE: Nette Framework: Chytré šablony
        Ani mi to moc nevadí. Stejně už pár měsíců zkouším CodeIgniter a Cake, tak k tomu připojím i Nette. S frameworkem je práce většinou rychlejší a člověka práce víc baví, když se může soustředit jen na psaní specifických částí.

    2. v6ak

      Znalost XSS autorem šablon
      Ten, kdo dělá šablony by IMHO měl znát XSS.
      1. Pokud zná HTML, nemělo by to pro něj být problém.
      2. Na XSS je řada možností, vč. url.
      3. Srovnání s SQL Injection nesedí – SQL se typicky používá v modelu, zatímco HTML, JS, CSS (…) v šabloně/statické. To je asi hlavní odlišnost.

  5. Anonym

    Vyvijeno na Windows == Nizsi duveryhodnost
    Framework nevypada spatne, i kdyz si myslim, ze autor mel nejdrive nastudovat Martina Fowlera a detailne se obeznamit treba s Ruby on Rails (ktere, a to je treba uznat, za velky peniz (utraceny za drahy hardware) nabizeji pro vyvojare hodne muziky, a tak nejak celkove udavaji smer ve vyvoji webovych frameworku), nez zacal vymyslet MVC framework v PHPku. Ne kvuli kopirovani, ale kvuli pochopeni zakladnich konceptu a inspiraci

    Co me osobne ale nejde pod vousy je to, ze autor zjevne vyviji na Windowsech, a ne na Linuxu, jak by, pokud chce byt vniman jako skuteny guru, mel cinit:)

    Ale ted vazne: Zajimaji autara takove veci, jako treba asynchronni procesy bezici na pozadi, navaznost na emailovy server, konfigurace Apache a MySQL a celkove zabezpeceni serveru, vyuziti cache (memcached) atd? Tedy veci, kvuli kterym vznikl LAMP, kteryzto akronym jiste netreba prekladat?

    Nechci zbytecne rypat, ale fakt bych rad Nettte videl vyvijene na Linuxu, kam PHP prirozene patri. Tedy ne ze by neslo vyvijet na Windows, to jiste jde, ale prijde mi, ze linuxovi vyvojari jsou vetsinou skutecni odbornici, kdezto na Windowsech vyviji druha liga

    Dost na tom, ze ze zdrojaku se stava hlasna trouba Microsoftu (viz hned DVA rozhovory o IE8 po sobe. To proboha nestaci jeden?), takze na nej, s vyjimkou skvelych clanku o Nette, na protest odmitam chodit

    1. David GrudlAutor příspěvku

      Re: Vyvijeno na Windows == Nizsi duveryhodnost

      Framework nevypada spatne, i kdyz si myslim, ze autor mel nejdrive
      nastudovat Martina Fowlera a detailne se obeznamit treba s Ruby on Rails

      Tohle raději přejdu…

      Ale ted vazne: Zajimaji autara takove veci, jako treba asynchronni procesy
      bezici na pozadi, navaznost na emailovy server, konfigurace Apache a MySQL a
      celkove zabezpeceni serveru, vyuziti cache (memcached) atd? Tedy veci, kvuli
      kterym vznikl LAMP, kteryzto akronym jiste netreba prekladat?

      To jsou dobré otázky. Obzvlášť, když vidím, jak špatně (nebo vůbec)
      se tyto věci řeší v populárních open source aplikacích. Proto Nette SafeStream patří
      k nejdříve uvolněným
      částem frameworku. Dnes je už sice mimo mainstream frameworku, nahradila ji
      cache, která však atomické operace se soubory zaručuje taky. Týká se to
      i v tomto článku zmíněných šablon – nemůže se stát, že by se
      obsah natáhl neúplný nebo jinak poškozený.

      Cache (jako drtivá většina věcí ve frameworku) je založena na
      interfaces, je tedy možné čistým způsobem přidat libovolný další
      adaptér (nedá mi to – Ruby a Rails interfaces nemají, možná si měli
      autoři nejdřív nastudovat Fowlera a Nette)
      . Adaptér pro Memcached je
      součástí distribuce.

      Něco málo o zabezpečení serveru a konfiguraci viz druhý
      díl
      a ten příští.

      Nechci zbytecne rypat, ale fakt bych rad Nettte videl vyvijene na Linuxu, kam
      PHP prirozene patri. Tedy ne ze by neslo vyvijet na Windows, to jiste jde, ale
      prijde mi, ze linuxovi vyvojari jsou vetsinou skutecni odbornici, kdezto na
      Windowsech vyviji druha liga

      Ja bych vás zase rád viděl s lubrikovanou mrkví zaraženou *********, ale ne vždy se naše přání plní.

      Dost na tom, ze ze zdrojaku se stava hlasna trouba Microsoftu (viz hned DVA
      rozhovory o IE8 po sobe. To proboha nestaci jeden?), takze na nej, s vyjimkou
      skvelych clanku o Nette, na protest odmitam chodit

      Díky za pochvalu ;)

      8. 4. 2009 22:35 redakčně upravil Martin Hassman, důvod: Tohle přání minimálně ze zdravotních a estetických důvodů přesouvám mezi řádky.
      1. Anonym

        Re: Vyvijeno na Windows == Nizsi duveryhodnost
        takovouto reakci jenom potvrzujete moje pochybnosti o Nette a vasi skutecne motivaci k jeho tvorbe, a pokud jsem nekdy uvazoval, ze bych take prispel k jeho vyvoji, tak ted uz neuvazuji

        1. David GrudlAutor příspěvku

          Re: Vyvijeno na Windows == Nizsi duveryhodnost
          Jsem rád, že vás atomické operace se soubory a podpora memcached přesvědčily o kvalitách frameworku. Motivací vývoje skutečně byla absence jiného frameworku, který by podobné věci v základu nabízel.

          ;)

          1. Anonym

            Re: Vyvijeno na Windows == Nizsi duveryhodnost
            ne, 'atomické operace se soubory' se soubory me opravdu nedokazi presvedcit

            misto nich davam prednost SQL a databazim :)

        2. tomik.vitek

          Re: Vyvijeno na Windows == Nizsi duveryhodnost
          Děkujeme, že víme, že do Nette přispívat nebudete, a věřte, že jsem tomu opravdu všichni rádi…

    2. Martin Hassman

      Re: Vyvijeno na Windows == Nizsi duveryhodnost
      s vyjimkou skvelych clanku o Nette, na protest odmitam chodit

      V tom případě musím poděkovat za přízeň!

      1. Anonym

        Re: Vyvijeno na Windows == Nizsi duveryhodnost
        ze zacatku vypadal zdrojak velice nadejne, ale fakt to s tim microsoftem uz prehanite. Prece jenom plati, ze zdrojak patri pod root a ten je o open source

        a prosim vas zkuste tomu Grudlovi vysvetlit, co je to feedback

        1. Martin Hassman

          Re: Vyvijeno na Windows == Nizsi duveryhodnost

          zdrojak patri pod root a ten je o open source

          Je mi líto, ale takhle takhle naše představa nevypadá. Jinak řečeno (ne)open source nebylo, není a nebude primárním kritériem pro výběr témat, která na Zdroják patří nebo nepatří. To nijak nevyjadřuje, zda open source v redakci máme nebo nemáme osobně rádi, ale to, jak by měl vypadat výběr témat pro magazín.

        2. KLoK

          Teď jsem se ztratil
          Ten feedback, to je "Grudl je béčko protože si nepřečetl Fowlera a ještě vyvíjí na windowsech"? Nebo to je to s tou mrkví?

        3. Anonym

          Re: Vyvijeno na Windows == Nizsi duveryhodnost
          Rekl bych, ze bylo uz dost techhle reci o Microsoft dost, a IE8 fuj… Pokud si myslite, ze Microsoft neexistuje a jako takovy je potreba jej ignorovat, pak radeji vyhledejte pernikovou chaloupku.

          Skvely serial o Nette mimochodem ;)

        4. tomik.vitek

          Re: Vyvijeno na Windows == Nizsi duveryhodnost
          Tak já to zkusím: takže Davide, feedback, je takovýto, když se postavíš s mikrofonem moc blízko reprodukrů a začneš do toho mikrofonu foukat…

          Jen tedy nevím, jakou to má souvislost…

          1. David GrudlAutor příspěvku

            Re: Vyvijeno na Windows == Nizsi duveryhodnost
            Děkuji :-) Jen slovo "feedback" mě uvádí do nejistoty, kterou částí těla mám do toho mikrofonu foukat.

            p.s. Není nutné reagovat na každou žádost od zamindrákovaných anonymů.

            1. Martin Hassman

              Re: Vyvijeno na Windows == Nizsi duveryhodnost
              Myslím, že jsme již zcela odbočili od tématu článku, proto celé toto vlákno mažu. Problematiku platformy Nette doporučuji řešit na fóru Nette, poznámky k zaměření magazínu pak přes redakční schránku. Tato diskuse nechť zůstane nadále otevřená pro téma články čili šablony v Nette.

  6. Karel Hák

    Hezká URL v Coffe Machine

    Dobrý den,

    zkoušel jsem přetvořit router tak, aby vytvářel „hezká“ url, avšak
    nepodařilo se mi to, proto bych se chtěl zeptat jak na to.

    Změněný kód v bootstrap.php:
    // Step 4: Setup application router
    $application->setRouter(new SimpleRouter(‚Machi­ne:default‘));
    $router = $application->getRouter();

    // přidáme routu, objekt Route do MultiRouteru
    $router[] = new Route(‚<presen­ter>/<action>/<co­in
    [0–9]+>‘, array(
    ‚presenter‘ ⇒ ‚Machine‘,
    ‚action‘ ⇒ ‚default‘,
    ‚coin‘ ⇒ NULL,
    ));

    Vygenerovaná url je však ve tvaru:
    http:
    test.local­host/machine/de­fault/5?do=in­sert

  7. kamil

    Šablonovací systém Grudly

    Líbí se mi že Grudly je podobný Smarty a navíc řešít třeba výpis v JS :)
    good work

  8. David Žaba

    Sablona COFFEE nefunkcni
    Dobry den. Krasny tutorial. Stahl a otestoval jsem aplikaci, avsak po nakupu napoje nad 10Kc se aplikace nepresmerovava na pohled COFFEE s nakoupenou kavou, tj. mince zustavaji stale zobrazeny a kava nikde. Netusite proc? Predesly dil bez pouziti adresare TEMP pro ukladanim docasnych souboru fungoval :-(

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=2983