Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Translate to English… Ins Deutsche übersetzen…

Nette a propojení stránky s kódem

Minule jsem ukazoval, jak lze s Nette stavět statické stránky. Ne náhodou jsem začal právě tímto tématem. Statické stránky a technika „dědění“ jsou totiž základním pilířem budování webového sídla. Je na webovém architektovi, aby připravil návrh website, grafik společně s HTML kodérem mohou pilovat vizuální podobu stránek a programátor je oživuje. Nette plně podporuje tuto pokrokovou filozofii skupinového vývoje.

Troška terminologie nikoho nezabije

Začínáme se věnovat oživování stránek, opusťme tedy pojem „statické stránky“. Jen by nás mátl.

Nette podporuje stránky zapsané nejen v jazyce XHTML, ale i HTML a XML (např. RSS kanály). Místo neobratného „HTML-XHTML-XML stránky“ budu dále používat termín dokumenty.

Upozornění: Článek se týká velmi staré verze Nette Framework, současná syntaxe je jiná.

Dokument je tvořen stromem elementů. Program může s touto hierarchií dále pracovat prostřednictvím tzv. DOM.

Základní jednotkou oživování dokumentů je komponenta. Jde o třídu (resp. objekt, podle kontextu), která je potomkem Component. Speciálním druhem komponenty je stránka (třída Presenter). Komponenty tvoří stromovou strukturu a jejím kořenem je vždy nějaký následník třídy Presenter. Tuto strukturu budu označovat jako COM. Nemá to nic společného s technologií COM od Microsoftu.

Všechny třídy v Nette mají prefix N – od PHP 5.3 leží ve jmenném prostoru Nette.

Trojí hierarchie

Pro rekapitulaci, ve hře jsou tři různé hierarchické struktury:

  1. Website, tedy hierarchie dokumentů
  2. strom XML/HTML elementů tvořících dokument
  3. strom komponent oživující dokument

Website je adresář obsahující dokumenty a případně i další podadresáře. Hierarchie, kterou mám v bodě č. 1 na mysli, však není tvořena rozdělením dokumentů do podadresářů, ale oním děděním popsaným v minulém díle!

Jak se oživuje dokument

Je třeba vytvořit nějakou hierarchii komponent a tu propojit s dokumentem. Pro začátek si vystačíme s nejjednodušší hierarchií, tvořenou jedinou komponentou, tedy komponentou stránky. A protože dokumenty jsou základním pilířem Nette, tam právě dokumentu musíme říci, kde je ukryt oživovací kód. K tomu použijeme hlavičku:

<?nette class="MyPage" ?>
<html>
<head>
  <title>Don't know...</title>
</head>

<body>
  <p>Hello World!</p>
</body>
</html>

V atributu class je přípustná i hodnota auto, pak bude název třídy určen automaticky z názvu stránky.

Třída MyPage může vypadat třeba takto:

<?php

class MyPage extends Presenter {

  function render($document)
  {
    $document->head->title = 'Nette example';
  }

}

Uvedený kód přes DOM přistupuje zpátky k dokumentu a změní obsah elementu <title>. Jednoduché, že?

Nyní ve stránce použijeme komponentu, třeba TGrid:

<?nette class="MyPage2" ?>
<html xml:lang="en" lang="en"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:com="http://texy.info/nette">
<head>
  <title>Nette demo</title>
</head>

<body>
  <com:TGrid id="grid1" />
</body>
</html>

A opět příklad MyPage2:

<?php

class MyPage2 extends Presenter {

  function render($document)
  {
    $document->getElementById('grid1')->atribut = 'hodnota';
  }

}

Dosud vše jasné? To je dobře. Možná si ale říkáte, proč jsem nepoužil zápis $this->grid1->.... Je to prosté. DOM a COM jsou dočista jiné struktury. Takže nyní prosím zpozorněte.

Vazba DOM ↔ COM

Zatímco COM reflektuje potřeby programátora, DOM tvoří HTML kodér. Dva naprosto neslučitelné zájmy. A Nette jim dopřává maximální volnost. Tedy, pokud totálně překopu vzhled stránky, změním tím k nepoznání DOM. Ale je nutné, aby kvůli tomu programátor musel předělávat aplikaci? Ne! Programátor má své COM a to se mu nezměnilo.

Příklad: tvoříme blog.

Nejprve pohledem programátora: Titulní stránku představuje pět článků a nějaký stránkovací mechanismus pro přístup k dalším článkům. Na to se nám výborně hodí komponenta TDataGrid. Jde o jeden logický celek, který plně zvládne požadovaný úkol. Programátor si ho v COM zpřístupní pod názvem grid1, tedy $this->grid1. V metodě initialize() ho napojí na zdroj dat a nastaví stránkování po pěti záznamech.

A nyní pohledem webdesignera: Komponentu DataGrid tvoří dva grafické celky:

  • zobrazení záznamů, v našem případě jednotlivých článků
  • zobrazení „stránkovátka“

Nette není tak hloupé, aby obojí zobrazovalo napevno za sebou. Naopak – každý z těchto celků si můžeme umístit libovolně na stránce. Ba co víc – webový architekt usoudí, že stránkovátko by mělo být nejen na spodku stránky, ale i nahoře. Ovšem to horní by mělo být méně výrazné, že.

Dejme si to dohromady. Máme komponentu TDataGrid. Ta nabízí dvě renderovací polohy, říkáme jim parts. Jednu z těchto poloh chceme na stránce zobrazit dvakrát. Dále víme, že konkrétní instance této komponenty se jmenuje grid1.

Jak bude vypadat HTML kód?

<?nette class="MyPage3"?>
<html>
<head>
  <title>Blog</title>
</head>

<body>
  <h1>The best blog</h1>
  <div>
    <com:DataGrid.pager name="mygrid" id="horni" />

    <hr />

    <com:DataGrid.items name="mygrid">
       ...
       ...
    </com:DataGrid.items>

    <h3>Dále pokračujte:</h3>

    <com:DataGrid.pager name="mygrid" />
  </div>
</body>
</html>

Jedna komponenta v COM, tři zobrazení v dokumentu. Spojuje je atribut name. Tím, že jsem horní „stránkovátko“ opatřil id, mohu s ním dále pracovat prostřednictvím DOM. A třeba nastavit mu menší provedení, jak požadoval grafik.

Komentáře RSS 2.0 komentářů » přidat

avatar

#1 Vojtěch Kopal http://goophy.frozenspots.com nový

S každým článkem jsem natěšenější. :) Po pravdě, už se dávno nemůžu dočkat.

Těším se až to vyzkouším, takhle to vypada jako dobry nastroj.

Posláno 17. 3. 2006 v 18.44 | Odpovědět

#2 Petr Weida http://www.accommodation-forum.com/ nový

Co pak to je na http://www.dgx.cz/nette/ ?? Škoda, že to není na začátku zamíchané… ;-)

Posláno 17. 3. 2006 v 18.52 | Odpovědět
Na komentář reagoval [3] Reg

#3 Reg http://reg.regzone.org nový

#2 Petr Weida: Hm, funguje to zajímavě když se parametr game-round změní na nějakej text… Jak to je udělaný?

Posláno 17. 3. 2006 v 19.13 | Odpovědět
Na komentář reagoval [4] Tomik
avatar

#4 Tomik tomik@jmx.cz nový

#3 Reg: Pomocí Nette, pochopitelně… :-)

Posláno 17. 3. 2006 ve 20.02 | Odpovědět
Na komentář reagoval [5] Reg

#5 Reg http://reg.regzone.org nový

#4 Tomik: Njn, a k čomu to je dobrý takováhle legrácka?

Posláno 17. 3. 2006 ve 20.12 | Odpovědět
Na komentář reagoval [6] syntax_error

#6 syntax_error nový

#5 Reg: Abychom se při čekání na Nette nenudili… :-P

Posláno 17. 3. 2006 ve 20.44 | Odpovědět

#7 PiDiBi http://www.websky.cz nový

cim dal vic mi to pripmina MS .NET

Posláno 17. 3. 2006 ve 21.52 | Odpovědět
Na komentář reagoval [20] Marek
avatar

#8 thingwath thingwath@palisada.net nový

T smrdí Borlandem. Asi budu zvracet.

Posláno 17. 3. 2006 ve 22.06 | Odpovědět
Na komentář reagoval [11] llook [21] David Grudl

#9 wizard http://wizifoto.blogspot.com nový

Nette se jeví jako opravdu silný systém.

Posláno 17. 3. 2006 ve 22.13 | Odpovědět

#10 Borek http://borber.com/blog/ nový

Objektový model vypadá sympaticky, jen mě při čtení napadlo pár věcí:

  1. COM je podle mého názoru špatně zvolený název, zvlášť když se jedná o zkratku pro Component Object Model, což je zavedený terminus technicus pro MS technologii.
  2. Je nějaký důvod, proč třídy začínají písmenem T?
  3. Když se dá dohromady bod 1 a 2, vychází konvence používaná ve frameworku PRADO. Je to záměr?
  4. Docela by mě zajímalo, jak bude Nette výkonné. Vypadá velmi flexibilně, což má vždycky nějakou režii. No a když se k tomu vezme v úvahu, že PHP není nejvýkonnější technologií pod sluncem, je určitá obava na místě.

Jinak držím palce, Nette zatím vypadá zajímavě.

Posláno 17. 3. 2006 ve 23.52 | Odpovědět
Na komentář reagoval [13] wizard [14] johno [21] David Grudl
avatar

#11 llook http://llook.wz.cz/weblog/ nový

#8 thingwath: Já se s tím T poprvé setkal u Turbo Vision. To sice bylo od Borlandu, ale důvod ke zvracení nevidím. Šlo o velice dobrý UI toolkit a takřka průmyslový standard (k vidění byl třeba u M602 nebo účetnictví Pohoda).

Taktéž pochopitelně nechápu, jak to T dokázalo prorůst i do jazyků, kde se neříká type, ale class.

Posláno 18. 3. 2006 v 5.37 | Odpovědět
Na komentář reagoval [16] thingwath

#12 hvge http://hvge.sk nový

Mne sa to bije s Template z C++ :) No jo, tazko sa da vyhoviet kazdemu :)

Posláno 18. 3. 2006 v 7.49 | Odpovědět

#13 wizard http://wizifoto.blogspot.com nový

#10 Borek: Ano, někde jsem si v článku všiml, že je tam T jako Třída. :)

Posláno 18. 3. 2006 v 9.13 | Odpovědět
avatar

#14 johno http://johno.jsmf.net/ nový

DGX: Nechcem tu vyvolať flamewar o tom, že je to prasácke, ale <?nette asi zloží PHP parser pri zapnutom short_tags_open.

Naopak chválim možnosť rozdeliť komponent na viac častí. Kde sa definuje šablóna komponenty?

Je nějaký důvod, proč třídy začínají písmenem T?

#10 Borek: Domnievam sa, že vďaka absencii namespace v PHP to slúži len na odlíšenie Nette od iných knižníc. Ak je táto domnienka správna, tak som za prefix N.

Docela by mě zajímalo, jak bude Nette výkonné. Vypadá velmi flexibilně, což má vždycky nějakou režii. No a když se k tomu vezme v úvahu, že PHP není nejvýkonnější technologií pod sluncem, je určitá obava na místě.

#10 Borek: Premature optimization is the root of all evil. Osobne si myslím, že šablóny sa predgenerujú do nejakého PHP medzikusu a nacachujú. Čiže ten celý poprask okolo generovania a spracovávania šablón, komponentov,… v Nette sa deje len raz a to keď sa niečo zmení.

Pomalosť PHP parsera je to posledné čo by ma trápilo.

Posláno 18. 3. 2006 v 10.19 | Odpovědět
Na komentář reagoval [15] johno
avatar

#15 johno http://johno.jsmf.net/ nový

#14 johno: Hopla, to short_tags_open beriem späť. Nette asi neparsuje PHP parser.

Posláno 18. 3. 2006 v 10.37 | Odpovědět
avatar

#16 thingwath thingwath@palisada.net nový

#11 llook: Jenže dnes se píše rok 2006 a máme 21. století. Já hlavně nechápu, proč je třeba před ta jména vůbec něco dávat. To se dělá v jazycích, kde nemají žádné jmenné prostory ani balíčky ani nic podobného a to snad PHP není, nebo jo?

Posláno 18. 3. 2006 v 11.27 | Odpovědět
Na komentář reagoval [17] Jakub Podhorský
avatar

#17 Jakub Podhorský jakub.podhorsky@centrum.cz nový

#16 thingwath: PHP namespace nemá…imho se mi to zdá jako zbytečnost tam dávat ty předpony když je to framework…pochybuju že k tomu bude někdo používat další „systém“(nebo jak to nazvat) třetí strany…možná tak nějaký další vlastní balíčky ale tam bych konflikty názvů nepředpokládal

Posláno 18. 3. 2006 ve 13.14 | Odpovědět
Na komentář reagoval [18] cita
avatar

#18 cita http://citadesign.site.cz nový

#17 Jakub Podhorský: ja bych nejakou simulaci namespace uvital. V jinych jazycich to ma sve duvody( http://en.wikipedia.org/wiki/Namespace_(programming) ) a proc si je neprenest i do php 4 a 5, v 6 tusim ze maji byt nativne

Posláno 18. 3. 2006 v 15.24 | Odpovědět
avatar

#19 llook http://llook.wz.cz/weblog/ nový

Pro nějaký prefix bych byl. Třeba kolizi s názvem třídy Page si představit dokážu, s třídou NPage je to lepší.

Jmenné prostory měli být už v PHP5 a dokonce i malou chvilku byli, i když dost mizerně navrhlý. Ale už zase nejsou. :-(

Posláno 18. 3. 2006 v 18.36 | Odpovědět

#20 Marek nový

#7 PiDiBi: na tohle musím reagovat.

dgx už dřív psal, že Nette trošku .NET připomíná, že má komponenty a události. Jenže já s každým dalším článkem žasnu, jak práve .NET nepřipomíná!

Já jsem programátor ASP.NET. KDysi jsem žasnul nad runat=„server“, komponentou přímo v HTML kódu atd. Dnes ale zírám, jak někdo to zvládá daleko elegantnějí. Rozdělení COM – DOM je geniální tah. To pochopí každý, kdo kdy tvořil složité administrační rozhraní. I když teda zkratku COM bych fakt změnil. Komponenta rozdělená na více částí taky. V ASP.NET prakticky nelze použít datagrid pro hlavní stránku blogu, to by udělal jen začátečník. Jenže v Nette to má logiku.

K PHP se asi nedostanu, ale tomuhle musím fandit, to je skutečně revoluční přístup.

Posláno 19. 3. 2006 v 8.42 | Odpovědět
Na komentář reagoval [21] David Grudl [22] Borek
avatar

#21 David Grudl http://davidgrudl.com nový

#8 thingwath: #10 Borek: Všechny třídy musí začínat nějakým prefixem, neboť v PHP je jmenný prostor děsně zaplácaný. Definovaných 1300 funkcí, 1340 konstant, 75 tříd a 7 rozhraní ještě před vykonáním prvního řádku kódu – a to používám jen několik extensions.

Váhám mezi T a N. Zatím používám T, jako hold Borlandu. Jejich programátoři v roce 1995 napsali VCL pro Delphi, které je v mnoha směrech inspirací pro Nette. Nikoliv tedy .NET, ale Delphi. Nejspíš ale přejdu na N.

#10 Borek: Nette je výkonné dostatečně :-)

#20 Marek: Když jsem studovat ASP.NET, tak jsem se divil, proč je tolik věcí nedotažených nebo zbytečně omezujících. V tomto směru je Nette trošku jinde.

Posláno 19. 3. 2006 v 9.53 | Odpovědět
Na komentář reagoval [22] Borek

#22 Borek http://borber.com/blog/ nový

Nemám stejný pocit jako #20 Marek: nebo #21 David Grudl:, že by některé věci v ASP.NET byly nedotažené a že Nette je řeší líp (vím, že přímo tato formulace nezazněla, ale chtě nechtě mi to tak vyznívá).

Nette jde cestou absolutní flexibility, ASP.NET cestou rozumného komprimisu mezi řádem a flexibilitou:

  • V Nette můžu dokument podědit od libovolného jiného dokumentu a překrýt libovolný jeho element. V ASP.NET musím použít master pages, které nejsou tak flexibilní, ale při pohledu do zdrojáku je zcela jasné, která část mateřského dokumentu se předefinovává (u Nette to tak očividné není, protože mateřský dokument nenese žádnou informaci o tom, který element je určen pro potomky). Myslím ale, že v praxi budou dědičnost Nette a master pages v ASP.NET používány velmi podobným způsobem.
  • V Nette můžu komponentu rozdělit na víc částí, v ASP.NET nikoliv. Nette je flexibilnější, ale opět přináší určitý zmatek do vývoje, protože při pohledu na komplikovanou stránku není jasné, kde všude se Nette komponenta nalézá. V ASP.NET je komponenta atomickou jednotkou a je pravda, že přepsat příklad z článku do ASP.NET by znamenalo o pár řádků kódu navíc (mít navigátor nahoře i dole znamená volat metodu pro přechod na jinou stránku gridu dvakrát místo jednou). Ale jak často je podobná funkčnost potřeba? Napadá mě opravdu minimum případů, kdy se rozdělení komponent hodí – a i potom to v ASP.NET znamená jen o pár řádků kódu navíc, tedy nic hrozného. Asi bude nějaký důvod, proč se rozdělení komponenty na víc částí neujalo v žádné oblasti, kterou znám (HTML, ASP.NET, Windows Forms, XAML, …).
  • V ASP.NET musím serverové komponenty označit jako runat=„server“, v Nette se ke každému elementu DOM mohu chovat, jako by byl serverový. To opět ukazuje na rozdílnou filosofii – Nette je maximálně flexibilní, ASP.NET vyžaduje určitý řád a disciplínu (ve skutečnosti má v ASP.NET označení komponenty za serverovou mnoho dalších důsledků, jako automatické používání ViewState, zapnutí schopnosti renderovat jiný výstup pro různé klienty atd. – proto nejsou všechny elementy automaticky runat=„server“).

Prostě Nette na to jde jinak, v určitém smyslu sympaticky, v určitém smyslu trochu chaoticky. Ale uvidíme, těžko soudit podle dvou třech článků :)

Posláno 19. 3. 2006 ve 12.35 | Odpovědět
Na komentář reagoval [23] David Grudl
avatar

#23 David Grudl http://davidgrudl.com nový

#22 Borek: S tím v podstatě souhlasím. Až na tu chaotičnost – naopak, vyšší flexibilita vede k lepšímu řádu, neboť nemusíme nic „hackovat“.

Vyhněme se akademickým diskusím a porovnávání Nette a ASP.NET. Porovnávat bude možné třeba za rok, až se vše v praxi vyzkouší a objeví slabá místa. Zatím to nemá smysl.

Posláno 19. 3. 2006 ve 12.52 | Odpovědět
Na komentář reagoval [25] johno [26] Borek

#24 hvge http://hvge.sk nový

Len taka hnidopisska otazka, nemas tam v jednom z tych prikladov chybu?

<com:TDataGrid-items name="grid1">
...
</com:TDataGrid:items>

V otvaracom tagu je items oddelene pomlckou a v uzatvaracom dvojbodkou.

Posláno 19. 3. 2006 ve 13.47 | Odpovědět
Na komentář reagoval [27] David Grudl
avatar

#25 johno http://johno.jsmf.net/ nový

[25] Taktiež je niekde id="grid1" a inokedy name="grid1".

#23 David Grudl: Asi si prehliadol moju otázku. Kde sa definuje šablóna komponenty?

Posláno 19. 3. 2006 ve 14.08 | Odpovědět
Na komentář reagoval [27] David Grudl

#26 Borek http://borber.com/blog/ nový

#23 David Grudl: Co naplat, děláš komponentně-událostní framework, tak se asi srovnání s jinými komponentně-událostními frameworky nevyhneš :)

vyšší flexibilita vede k lepšímu řádu, neboť nemusíme nic „hackovat“

To je hodně odvážné tvrzení, ale vypadá to, že mu opravdu věříš :)

Posláno 19. 3. 2006 ve 14.25 | Odpovědět
Na komentář reagoval [27] David Grudl [29] llook
avatar

#27 David Grudl http://davidgrudl.com nový

#24 hvge: to je samozřejmě překlep.

#25 johno: id je jedinečný identifikátor v DOM, zatímco name je jedinečný identifikátor v COM. Tedy id mi identifikuje konkrétní místo v dokumentu, zatímco name určuje jméno komponenty. Proto víc „oblastí“ má stejné name.

Té otázce ohledně šablony komponenty nerozumím…

#26 Borek: Dobře, zkusme si tedy zrovna onen příklad s datagridem a dvojím stránkováním. Jak se tohle konkrétně udělá v .NET? Vážně nevím, jen se ptám.

Posláno 19. 3. 2006 v 15.02 | Odpovědět
Na komentář reagoval [31] Borek
avatar

#28 johno http://johno.jsmf.net/ nový

[28] Jasné už chápem. Ohľadom tej otázky. No kde je zadefinované to XHTML, na ktoré sa prerobí TDataGrid? Či už items alebo pager.

Posláno 19. 3. 2006 v 15.21 | Odpovědět
Na komentář reagoval [30] David Grudl
avatar

#29 llook http://llook.wz.cz/weblog/ nový

#26 Borek: Já tomu také věřím. Ale je to asi jako spor mezi zastánci dynamického a statického typování (líbí se mi Van Rossumova argumentace: „Jestliže se podíváte na velké programy napsané v silně typovém jazyce, všimněte si, že mnoho času je stráveno právě obcházením typového systému.“).

Posláno 19. 3. 2006 v 15.30 | Odpovědět
avatar

#30 David Grudl http://davidgrudl.com nový

#28 johno: Aha, rozumím.

Každá komponenta může mít tolik šablon, kolik má renderovacích částí. Šablony komponent fungují podobně, jako „velká šablona“ stránky. Nakonec stránka je také komponenta. Šablona se tedy naparsuje z přiloženého .HTML souboru a je komponentě dostupná přes DOM.

Samozřejmě komponenta nemusí vůbec šablonu využívat a sama si generovat vlastní (X)HTML výstup.

Také je možné komponentě vnutit novou šablonu. Třeba u takového Repeateru se to rovnou předpokládá.

Posláno 19. 3. 2006 v 16.03 | Odpovědět
Na komentář reagoval [32] johno

#31 Borek http://borber.com/blog/ nový

#27 David Grudl: GridView má vlastnosti PagerSettings, PagerStyle a PagerTemplate, které do značné míry umí řadu potřeb uspokojit. Pokud by bylo opravdu nutné mít jednu část komponenty úplně jinde něž druhou část komponenty, v ASP.NET by se to asi nejlíp řešilo vytvořením nové komponenty (např. Pager), která by po kliknutí na „předchozí“ a „další“ volala odpovídající metody GridView.

Ale jak jsem řekl, nemyslím, že je roztroušení jedné komponenty na více míst častým požadavkem. Kdyby bylo, patrně by to všechny současné komponentové technologie podporovaly (a mně se nevybavuje žádná, která by to dělala).

Posláno 19. 3. 2006 v 16.37 | Odpovědět
Na komentář reagoval [33] David Grudl
avatar

#32 johno http://johno.jsmf.net/ nový

#30 David Grudl: Rozumiem. Čo je to ten Repeater?

A ďalšia otázka. Ako sa chystáš cachovať template, v ktorom potom máš $document->head->title = 'Nette example'; Doteraz som bol v tom, že Nette šablóna sa prekladá do PHP medzikusu, ale toto ma dosť zmätlo.

Posláno 19. 3. 2006 v 16.48 | Odpovědět
Na komentář reagoval [33] David Grudl
avatar

#33 David Grudl http://davidgrudl.com nový

#31 Borek: a tohle mi právě připadá chaotičtější. Rozdělování komponent ti jako častý požadavek nepřipadá jen z toho důvodu, že to v ASP.NET nelze řešit elegantně.

Podívej se na to prosím z nadhledem:

  • Komponenta je určitý logický celek, je to objekt s nějakým stavem a metodama. Je to produkt práce softwarového architekta.
  • HTML výstup se řídí znalostmi použitelnosti, přístupnosti, grafickými potřebami atd. Je to produkt webdesignéra.

Já vycházím s představy, že tyto dva pohledy si mají žít vlastním životem, protože se snaží vyhovět diametrálně jiným požadavkům. Naopak jiné frameworky vnucují souhru – jedna komponenta = jedna oblast v HTML. Mě to připadá velmi omezující.

#32 johno: Kešování funguje na více úrovních. Ta nejmenší odpovídá určitému elementu šablony. „Přepočítává“ se jen „zasažená“ část DOM. Dále je možné kešovat na úrovní komponenty (resp. její části) a tedy i celé stánky.

Posláno 19. 3. 2006 v 17.20 | Odpovědět
Na komentář reagoval [34] hvge [35] johno [36] Borek

#34 hvge http://hvge.sk nový

#33 David Grudl: Prepocitava sa len zasazena cast no znie to genialne, ale fakt ze sa tesim na implementaciu :)

Posláno 19. 3. 2006 v 19.43 | Odpovědět
avatar

#35 johno http://johno.jsmf.net/ nový

#33 David Grudl: Mám to chápať tak, že šablóna je vlastne plain text a keď zavolám $document->head->title, tak až vtedy sa na ňu pustia šialené regexpy, čo sa k title tagu prekúšu a zmenia jeho obsah? Hmm, to sa mi nejako nezdá.

Posláno 19. 3. 2006 ve 20.27 | Odpovědět
Na komentář reagoval [37] David Grudl

#36 Borek http://borber.com/blog/ nový

#33 David Grudl: Aby nedošlo k mýlce, já neříkám, že na to jde Nette špatně. Jde na to jinak, vidím výhody jeho přístupu, ale i drobné nevýhody.

Zpět k tématu: ať už se jedná o webový nebo desktopový vývoj, často je komponenta jednotka zobrazení víc než cokoliv jiného. Existují sice výjimky, jako třeba nevizuální komponenty, ale více méně všude platí, že komponenta je něco, co umí renderovat svou podobu a dělá to na jednom definovaném místě. Delphi, ASP.NET, Windows Forms, XAML, Swing, SWT, … – všichni na to jdou stejně. Nette na to jde jinak.

Posláno 19. 3. 2006 ve 20.46 | Odpovědět
Na komentář reagoval [37] David Grudl
avatar

#37 David Grudl http://davidgrudl.com nový

#36 Borek: To máš pravdu. A v podstatě odsud také pramení má tehdejší kritika ASP.NET:

…tento způsob práce se v žádném případě neshoduje s principem HTML & HTTP a jde jen o násilné naroubování cizorodých postupů na web.

Nebo jinak řečeno, co na desktopu zas tak nevadí, může hodně vadit na webu. Delphi & spol. doslova plývají pamětí, jejich (teoretický) viewstate rychle nabývá obřích rozměrů. Ale nevadí to, protože megabajt paměti je nesrovnatelně „rychlejší a levnější“ než megabajt přenosu přes internet.

#35 johno: Ve skutečnosti je to nádstavba nad DOMNode, což je nejrychlejší způsob práce s XML dokumenty v PHP. Parsování je rychlejší než unserialize nějaké vlastní struktury.

Posláno 20. 3. 2006 v 9.50 | Odpovědět
Na komentář reagoval [38] Borek

#38 Borek http://borber.com/blog/ nový

#37 David Grudl: Nejde o paměť, nejde o přenášená data, jde o princip. Komponenta v pojetí Nette je něco jiného než komponenta v pojetí zbytku světa, což může znamenat některé výhody proti všem jiným GUI frameworkům, ale taky určité zmatení pro vývojáře.

Nechci Nette nějak dopředu hodnotit, jsem opravdu zvědavý, co z toho nakonec vyleze. Tyhle poznámky píšu jen jako „early feedback“, abys znal co nejvíc názorů na svou práci (asi by ti moc nepomohlo, kdyby ses v komentářích 20× dočetl něco jako „Už se nemůžu dočkat, Nette bude super!“).

Posláno 20. 3. 2006 ve 12.41 | Odpovědět

#39 MiSHAK http://mishak.wz.cz nový

Menší rada radši zřiďte samostatné fórum pro Nette, IMHO v komentářích už tyto dotazy nemají co dělat…

Posláno 20. 3. 2006 v 15.50 | Odpovědět
avatar

#40 noname noname@noname.non nový

nejsem kdovíjaký programátor v php, tak se omlouvám za možná blbý dotaz, ale jestli to chápu dobře, tak Nette projde text, najde tam odkazy na své funkce, ty pak třeba regexpem nahradí za jejich ekvivalenty v php a výsledný php kód se provede. Ten framework je tedy jakési „php texy“. Můj dotaz tedy zní – bude možné v nějakém debug módu zjistit ten výsledný php kód, který je realizován?

Posláno 21. 3. 2006 ve 20.00 | Odpovědět
Na komentář reagoval [41] enoice
avatar

#41 enoice http://enoice.fialove.eu nový

#40 noname: to jde bez závislosti na Nette…

ob_start();
echo 'Hello world!';
$output = ob_get_clean();
echo str_replace('world', 'man', $output);
Posláno 22. 2. 2008 ve 14.47 | Odpovědět

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře ani hlasovat

Výtah na začátek článku na první komentář

Názory čtenářů v diskusích nejsou názory provozovatele webu, a ten za jejich obsah neodpovídá.

phpFashion © 2004, 2010 David Grudlo webu

Pokud není uvedeno jinak, podléhá obsah těchto stránek licenci Creative Commons BY-NC-ND Creative Commons License BY-NC-ND

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.