Nette – pohled začátečníka (splní má očekávání?)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ondřej Mirtes
Člen | 1536
+
0
-

Ahoj,
už asi tři roky dělám webové prezentace na zakázku. Nic velkého, obvykle firemní stránky s ne moc vysokou návštěvností. Mám i svůj vlastní RS s dost základní funkčností, ale pro ty potřeby to stačí. Doslechl jsem se o Nette a zvažuji přechod na něj. Potřeboval bych se ale zeptat lidí, co s ním dělají, jestli splní má očekávání. Tak kdyžtak díky za reakce :)

Důvody, proč chci přejít:

Reprezentativnější kód

Moje prezentace fungují, ale jejich zdroják se stydím někomu ukázat a něco v něm upravovat (po delší době, když si přesně nepamatuju, jak jsem to psal), je peklo. Objektů se v něm dotýkám jen letmo v pár případech. Od Nette očekávám praktické oddělení PHP a HTML (do Presenterů a HTML šablony, která bude mít jen nejzákladnější PHP syntaxi – data pro ni budou připravena už z Presenteru) a lepší přehlednost fungování díky objektům.

Znovupoužitelnost kódu

To je to hlavní. Weby, jak dělám teď, mě už nebaví. Prakticky jakýkoli klientův požadavek umím vyřešit, ale když za mnou přijde další klient, že ho chce taky, můžu sice původní kód znovupoužít, ale za cenu toho, že v něm půlku názvů přepíšu (sloupce v tabulkách se jmenují jinak, názvy proměnných jsou vázány na první prezentaci, takže pro lepší „přehlednost“ jsem je jeden čas přepisoval také atd.), takže nejde už o programování, ale docela věrnou simulaci cvičené opice. A ještě se musím modlit, abych někde na nějakou hodnotu nezapomněl a ve specifických případech to přestalo fungovat.
Od Nette očekávám, že nademnou bude „bdít“ (jinak řečeno, bude pro mě motivace), abych psal určité úseky kódu (možná 100%) jako komponenty s výhledem na budoucnost („to se mi bude třeba za rok na nějakým webu hodit“). A když si pak při tvorbě webu „vzpomenu“ – pro tenhle případ můžu použít komponentu, kterou jsem v předminulé zakázce dělal, tak jen zkopíruju její zdroják a upravím s ní související HTML šablonu. A když požadavky budou takové, že budu muset zasáhnout do kódu komponenty, tak tak, abych ji v dalším aplikování mohl použít jak s původní funkčností, tak tou rozšířenou.

Absolutní kontrola nad tvarem adres

Ať už jsou moje dosavadní zdrojáky jakékoli, tak kontrolu nad tvarem URL jednotlivých částí webu mám stoprocentní. Interně to funguje tak, že se skripty volají ve tvaru index.php/parametr/parametr, např. index.php/blog/nazev-rubriky/nazev-clanku a pokud o webhostingu vím, že umožňuje mod_rewrite, vytvořím .htaccess a uživatel nevidí tu „index.php/“ část. Funguje mi všude „složková struktura“, tzn. pokud uživatel odebere jednu část cesty, nezavede ho to na 404ku, ale na nějakou logickou část – v tomhle případě výpis rubriky, titulní stránka blogu, titulní stránka webu. Bojím se, že jak je v Nette to routování, že se bude snažit být chytřejší než já a neumožní mi takový rozsah hraní si s adresami jako doposud. Např. mi funguje, že /blog/rubrika/2 mě zavede na druhou stránku výpisu článků rubriky, pokud druhá stránka neexistuje, hodí mě to na /blog/rubrika (ne /1). Pokud jako poslední parametr není integer, ale string, snaží se to v databázi najít článek. Pokud existuje, zobrazí ho to, pokud ne, mohu se rozhodnout zda zobrazit 404ku nebo přesměrovat čtenáře na adresu /blog/rubrika a vypsat její obsah. A miliony dalších vylomenin, které zde nebudu vypisovat :) Umožní mi to routing? Neomezí mě nějak? (Omlouvám se, zatím jsem nezkoumal příslušnou dokumentaci.)

Zabezpečení

Toto je snad jasné, když aplikaci píšu od zelené louky a nemám to vyřešené na nějaké nejnižší úrovni, nemůžu zajistit stoprocentní zabezpečení, nějaký únik nechtěných znaků do MySQL dotazů atd. Těšim se, že mi Nette a případně dibi tyto věci vyřeší a já už nebudu muset myslet na to, že mi uživatel upraví/smaže články z DB či se mi do komentářů dostanou nechtěné znaky.

Neřešení 1000× řešeného

Těším se na používání věcí, které Nette samo implementuje – práci s obrázky, FTP připojení, autentizaci uživatelů. Věřím totiž, že narozdíl od mou napsaných funkcí to používá ověřené a spolehlivé postupy, které jen čekají na využití mnou :)

Tak, to je snad vše. Jsem zvědavý, jestli jsem svými požadavky vystihl to, jak v praxi probíhá tvorba webových aplikací na profesionální úrovni. Pokud jinak, rád se nechám poučit :)

Jsem zvědavý, jestli mé nároky na framework nejsou příliš velké a jestli mi neřeknete, zda nechci rovnou modré z nebe :o)

Chci jen zvednout úroveň svých prezentací (a ulehčovat si práci) a doufám, že Nette je to, co mi pomůže :) Jak rád říkám, zatím jsem si při tvorbě webů vystačil s if, while a foreach. Bojím se, zda dokážu Nette a jeho schopnosti využít k těm věcem, které jsem popsal výše, zda nebudu dále psát ten špatný kód a jen to budu mít zbytečně obalené mocným frameworkem, který nevyužiji. Dle toho textu to může vypadat, že jsem řádné programátorské prase :) Ano, jsem, ale aplikace fungují, validní striktní XHTML generují a server neshazují, tak jsem se nestaral o to, jak ten kód vypadá uvnitř. A teď jsem začal :)

Poslední otázka na závěr – jak dlouho mi zaučení se s Nette může zabrat ? (je mi jasné, že s tím bude odlišná práce od mých obvyklých návyků)

Doufám, že tohle téma nepřeskočíte kvůli délce jeho úvodního příspěvku a poradíte, zda od Nette správně očekávám to, co jsem popsal :) Díky!

romansklenar
Člen | 655
+
0
-

Ou :( měl jsem napsanou odpověď na tvůj příspěvek, ale spadl mi při odesílání prohlížeč :( a nechce se mi to psát celé znovu :( takže jen v rychlosti:

LastHunter napsal(a):

Od Nette očekávám praktické oddělení PHP a HTML (do Presenterů a HTML šablony, která bude mít jen nejzákladnější PHP syntaxi – data pro ni budou připravena už z Presenteru) a lepší přehlednost fungování díky objektům.

Ano toto je základní myšlenkou MVC/MVP frameworků. Nette tě k těmto praktikám více méně navádí.

Znovupoužitelnost kódu

To je to hlavní. Weby, jak dělám teď, mě už nebaví. Prakticky jakýkoli klientův požadavek umím vyřešit, ale když za mnou přijde další klient, že ho chce taky, můžu sice původní kód znovupoužít, ale za cenu toho, že v něm půlku názvů přepíšu (sloupce v tabulkách se jmenují jinak, názvy proměnných jsou vázány na první prezentaci, takže pro lepší „přehlednost“ jsem je jeden čas přepisoval také atd.), takže nejde už o programování, ale docela věrnou simulaci cvičené opice. A ještě se musím modlit, abych někde na nějakou hodnotu nezapomněl a ve specifických případech to přestalo fungovat.

Mluvíš mi z duše :-) někdy bych si raději prosřelil koleno, než dělal tyhle nudné věci, když musím nedělat v Nette. To je taky důvod proč se mi nechce zpět „do dob opičích“.

Od Nette očekávám, že nademnou bude „bdít“ (jinak řečeno, bude pro mě motivace), abych psal určité úseky kódu (možná 100%) jako komponenty s výhledem na budoucnost („to se mi bude třeba za rok na nějakým webu hodit“). A když si pak při tvorbě webu „vzpomenu“ – pro tenhle případ můžu použít komponentu, kterou jsem v předminulé zakázce dělal, tak jen zkopíruju její zdroják a upravím s ní související HTML šablonu. A když požadavky budou takové, že budu muset zasáhnout do kódu komponenty, tak tak, abych ji v dalším aplikování mohl použít jak s původní funkčností, tak tou rozšířenou.

Viz komponenta DataGrid z Quick Startu – jednoduchým selectem jí předáš v parametru data z tabulky, nad kterýma má operovat a máš znovu-použitelný výpis tabulky se stránkování a řazením, modifikáci pár řádků i ajaxovou.

Absolutní kontrola nad tvarem adres

Ať už jsou moje dosavadní zdrojáky jakékoli, tak kontrolu nad tvarem URL jednotlivých částí webu mám stoprocentní.

Umožní mi to routing? Neomezí mě nějak? (Omlouvám se, zatím jsem nezkoumal příslušnou dokumentaci.)

Je třeba pochopit jeho myšlenku, když ho umíš ovládat (nebo si napsat svůj) meze se nekladou.

Zabezpečení

Toto je snad jasné, když aplikaci píšu od zelené louky a nemám to vyřešené na nějaké nejnižší úrovni, nemůžu zajistit stoprocentní zabezpečení, nějaký únik nechtěných znaků do MySQL dotazů atd. Těšim se, že mi Nette a případně dibi tyto věci vyřeší a já už nebudu muset myslet na to, že mi uživatel upraví/smaže články z DB či se mi do komentářů dostanou nechtěné znaky.

Dá se říct že samozřejmost.

Neřešení 1000× řešeného

Těším se na používání věcí, které Nette samo implementuje – práci s obrázky, FTP připojení, autentizaci uživatelů. Věřím totiž, že narozdíl od mou napsaných funkcí to používá ověřené a spolehlivé postupy, které jen čekají na využití mnou :)

Není nic lehčího než zkusit, za 15min hraní si s třídou víš na čem jsi ;-)
ale pozor: je to návykové, fakt se ti nebude zpět do tvého RS který popisuješ ;-)

Jsem zvědavý, jestli mé nároky na framework nejsou příliš velké a jestli mi neřeknete, zda nechci rovnou modré z nebe :o)

Nároky jsou vysoké, ale Nette je spňuje a David Grudl nám to modré z nebe snesl ;-)

jak dlouho mi zaučení se s Nette může zabrat ? (je mi jasné, že s tím bude odlišná práce od mých obvyklých návyků)

Podle návyků a znalostí – základem je OOP, pokud již člověk pracoval s jiným MVC frameworkem dostane se do toho rychle.

Editoval romansklenar (8. 1. 2009 2:57)

kravčo
Člen | 721
+
0
-

LastHunter napsal(a):

Absolutní kontrola nad tvarem adres

Ať už jsou moje dosavadní zdrojáky jakékoli, tak kontrolu nad tvarem URL jednotlivých částí webu mám stoprocentní. Interně to funguje tak, že se skripty volají ve tvaru index.php/parametr/parametr, např. index.php/blog/nazev-rubriky/nazev-clanku a pokud o webhostingu vím, že umožňuje mod_rewrite, vytvořím .htaccess a uživatel nevidí tu „index.php/“ část. Funguje mi všude „složková struktura“, tzn. pokud uživatel odebere jednu část cesty, nezavede ho to na 404ku, ale na nějakou logickou část – v tomhle případě výpis rubriky, titulní stránka blogu, titulní stránka webu. Bojím se, že jak je v Nette to routování, že se bude snažit být chytřejší než já a neumožní mi takový rozsah hraní si s adresami jako doposud. Např. mi funguje, že /blog/rubrika/2 mě zavede na druhou stránku výpisu článků rubriky, pokud druhá stránka neexistuje, hodí mě to na /blog/rubrika (ne /1). Pokud jako poslední parametr není integer, ale string, snaží se to v databázi najít článek. Pokud existuje, zobrazí ho to, pokud ne, mohu se rozhodnout zda zobrazit 404ku nebo přesměrovat čtenáře na adresu /blog/rubrika a vypsat její obsah. A miliony dalších vylomenin, které zde nebudu vypisovat :) Umožní mi to routing? Neomezí mě nějak? (Omlouvám se, zatím jsem nezkoumal příslušnou dokumentaci.)

Nette je otvorený framework. Nie podľa licencie, či zverejnenia zdrojových kódov. Väčšinu riešení, ktoré ponúka nemá natvrdo zadrôtované do svojho jadra, ale ponúka k nim jednoduchý a jasný interface. To znamená, že štandardné a vo väčsine prípadov použiteľné riešenie frameworku nie je problém rozšíriť, prípadne úplne nahradiť implementovaním príslušného interfacu.

Tak je tomu i pri (dvojsmernom) routovaní, interface IRouter (ktorý je v Nette implementovaný hneď trikrát) požaduje dve metódy: match() a constructUrl(). Predpokladám, že štandardné riešenie je dostatočne silné a bude stačiť tvojim potrebám, no v prípade, že nie, nič ti nebráni napísať si vlastný router, ktorý zvládne všetko to, čo potrebuješ.

Jod
Člen | 701
+
0
-

Reprezentativnější kód

Aj keď ťa framework tak trochu núti kódiť podľa nejakých pravidiel, stále je to na programátorovi, aby dva krát myslel a raz písal a nesprasil kód =)

Znovupoužitelnost kódu

V nette jednoznačne ano :) Ale zase je to na programátorovi ako to spraví.

Absolutní kontrola nad tvarem adres

V nette znamená absolutná, naozaj absolutná :) Výhoda je, že linky sa môžu riešiť až pri dokončovaní aplikácie.

Zabezpečení

Dibi s Nette je super kombinácia. Dibi je chránená proti útokom, formuláre sú tiež zabezpečené, plus dobrá autentifikácia a pod.

Neřešení 1000× řešeného

Nette dobre spolupracuje so Zendom, takže ak chýba nejaká funkcionalita (Mail,PDF a pod) dá sa doplniť zo ZF (Zend_Mail, Zend_Pdf). Vela ľudí to tu tak používa, vrátane mňa.

Ako dlho trvá naštudovanie nette? Ja som po týždni občasného čítania dokumentácie začal robiť prvú aplikáciu v nette.

Aké sú ďalšie výhody? Česká dokumentácia a super CZ/SR komunita :). Určite ti každý ochotne poradí a ak nie každý ja určite ;)

Editoval Jod (8. 1. 2009 9:31)

Tomik
Nette Evangelist | 485
+
0
-

Krátce, rychle, aktuálně: Nette splní všechna tvá očekávání, a to na výbornou. A pomůže ti s mnoha dalšími věcmi. A ušetří mnoho práce.

Naučit se jej je pro schopného vývojáře otázka maximálně týden, dva usilovnějšího studia.

Ale pozor: Nette je šíleně návykové!

LuKo
Člen | 116
+
0
-

Pokud je programátor vepřík, obávám se, že zůstane vepříkem i v Nette. Kdysi jsem musel z funkcionálního programování skočit bez přípravy do vod Symfony a objektů. Nedopadlo to dobře, ani tak mocný FW mě nezachránil od prasečin. Nette je ještě volnější. Spíš to chce pochopit podstatu fungování takového FW. Možná to byl právě David, kdo pronesl, že správný programátor si již zkusil napsat svůj vlastní FW. Pak se člověk mnohem lépe vžívá do myšlenek tvůrce FW a tak snadno nepodlehne vepříkování. Myslím si, že v tomto případě nestačí se jen naučit syntax a jména metod a spoléhat se, že vše ostatní udělá Nette. Géniové (kterým bez předchozí zkušenosti s jiným FW stačí pár dní k profi ovládnutí Nette) však možná budou mít jiný názor ;-)

romansklenar
Člen | 655
+
0
-

LuKo napsal(a):

Možná to byl právě David, kdo pronesl, že správný programátor si již zkusil napsat svůj vlastní FW.

Znělo to nějak takhle: „Každý, kdo se tvorbou webů v PHP žíví si zkoušel napsat nějaké knihovny nebo framework, které by mu práci částečně automatizovali, a kdo říká že ne, ten ho píše ještě teď“ a myslím že to prones Jiří Knesl na webexpu :)

David Grudl
Nette Core | 8109
+
0
-

romansklenar napsal(a):

LuKo napsal(a):

Možná to byl právě David, kdo pronesl, že správný programátor si již zkusil napsat svůj vlastní FW.

Znělo to nějak takhle: „Každý, kdo se tvorbou webů v PHP žíví si zkoušel napsat nějaké knihovny nebo framework, které by mu práci částečně automatizovali, a kdo říká že ne, ten ho píše ještě teď“ a myslím že to prones Jiří Knesl na webexpu :)

Byl to Freud a řekl to přesně takto: „Dámy a pánové, každý z nás někdy onanoval a kdo tvrdí, že ne, ten to dělá dosud.“

Mimochodem je to pěkná blbost.

Jod
Člen | 701
+
0
-

Lebo to robia doteraz aj tí ostatní :D

Ondřej Mirtes
Člen | 1536
+
0
-

Díky všem za odpovědi a rady. Začíná se mi Nette opravdu líbit :)

Včera jsem si prošel Quickstart a sám jsem si to samozřejmě zkoušel všelijak upravovat. Ale bojím se, abych do toho zasahoval podle filozofie Nette. Kam bych měl psát třeba vlastní metody, které využiji v každé prezentaci? Napadlo mě do BasePresenteru, ale možná to bude lepší jako komponenta.
Nette přichází se spoustou funkcí na řešení spousty věcí, ale chtěl bych třeba funkce setTitle, addTitle a resetTitle na práci s <title> tagem. Nebo cokoli jiného. Psát to do BasePresenteru nebo do vlastní komponenty?
Také mám rád centralizaci nastavení chování aplikace. Ale to koukám řeší Nette\Config. Geniální :)
Poslední otázka: Jelikož Nette přichází se spoustou vlastních metod, tříd a proměnných, musel bych si je všechny pamatovat, abych je mohl při psaní aplikovat. Lze nějakým způsobem donutit některé IDE, aby mi po napsání názvu třídy nabízelo všechny metody a proměnné, ke kterým mohu v dané třídě přistupovat (jak to umí třeba NetBeans s Javadocem) ? Nebo se musím proklikávat API dokumentací na webu?

romansklenar
Člen | 655
+
0
-

LastHunter napsal(a):

Díky všem za odpovědi a rady. Začíná se mi Nette opravdu líbit :)

Poslední otázka: Jelikož Nette přichází se spoustou vlastních metod, tříd a proměnných, musel bych si je všechny pamatovat, abych je mohl při psaní aplikovat. Lze nějakým způsobem donutit některé IDE, aby mi po napsání názvu třídy nabízelo všechny metody a proměnné, ke kterým mohu v dané třídě přistupovat (jak to umí třeba NetBeans s Javadocem) ? Nebo se musím proklikávat API dokumentací na webu?

Samozřejmě dneštní IDEčka pro php podporují doplňování kódu, stačí si jen vybrat.

Mas3r
Člen | 116
+
0
-

LastHunter napsal(a):

Lze nějakým způsobem donutit některé IDE, aby mi po napsání názvu třídy nabízelo všechny metody a proměnné, ke kterým mohu v dané třídě přistupovat (jak to umí třeba NetBeans s Javadocem) ? Nebo se musím proklikávat API dokumentací na webu?

Netbeansy fungují parádně. Sám používám.

simon
Člen | 98
+
0
-

NetBeans 6.5, naprosta spokojenost, jen na linuxu mam problemy s SVN a @ na zacatku souboru, ale to je problem subversion ne IDE

gawan
Člen | 110
+
0
-

Netbeans je úplne super. Používam development verziu v podstate bez problémov. Tá ponúka navyše voči 6.5 niektoré super vlastnosti. Odporúčam si pozrieť blog vývojárov netbeans for php. Skoro každý deň pridávajú nejakú killer feature, kam sa hrabe zend studio, pdt, … ;) S lepším editorom som zatiaľ nerobil.

Jod
Člen | 701
+
0
-

Mne sa páčilo staré zend studio, toto nové čo je na eclipse je rovnako mrské ako eclipse a ešte stojí nenormálne peniaze. Tie beansy sú mrské a nemám rád, keď sa snažia robiť všetko zamňa a narobia len bordel :-/

Tomik
Nette Evangelist | 485
+
0
-

Nusphere PHPEd. Sice placený, ale pokud si člověk nekoupí poslední verzi, není to tragicky drahé a podporuje to i např. krokování PHP aplikací.

Jod
Člen | 701
+
0
-

To je dobrý editor, v práci som ho používal sem tam na nejaké phpčko. Akurát som si všimol, že je aj na linux, no na moje jabĺčko ni.

gawan
Člen | 110
+
0
-

Jod napsal(a):

Tie beansy sú mrské a nemám rád, keď sa snažia robiť všetko zamňa a narobia len bordel :-/

treba to vedieť používať, mne nerobia žiadny bordel ;-)

Ondřej Mirtes
Člen | 1536
+
0
-

Tak jsem to v NetBeansech zprovoznil, doplňování sice celkem funguje (což se mi hodí třeba u dibi, se kterým chci také začít), ale není to dokonalé. Dalo mi to do nápovědy i všelijaké definice z examples složek, které jsem nepotřeboval. Ty jsem vymazal, takže už je nápověda příkazů čistší :) A jak jsem očekával, tak mi to nenabízí možné proměnné v .phtml šablonách. Nějaký tip jak ho donutit?

Na nějaký placený editor se zatím necítím, nevím, co by mi přinesl nového :)

Co ty moje funkce, které využiji všude? Do BasePresenteru nebo jako komponentu?

sairon
Člen | 32
+
0
-

Kontextovou nápovědu v šablonách nenabízí ani PhpEd. A pochybuji, že to bude třeba u Zend Studia jiné. A ty funkce, udělal bych to podle citu – pokud upravují nějakou věc v presenteru, například nastavují titulek, dal bych je do předka presenterů. Pokud to je nějaký komplexnější logický celek, pak udělat samostatnou komponentu/control. Nebo pokud se jedná o sadu funkcí např. na úpravu dat, zpracovat to jako samostatnou třídu.

gawan
Člen | 110
+
0
-

LastHunter napsal(a):

A jak jsem očekával, tak mi to nenabízí možné proměnné v .phtml šablonách. Nějaký tip jak ho donutit?

Doprogramovať podporu nette do netbeans ;) Alebo odporúčam zahlasovať za podporu nette priamo u tvorcov netbeans tu.

Wosonj
Člen | 36
+
0
-

Vlastní metody setTitle() apod. používám teď taky a mám je v BasePresenter. Ovšem je to v TODO na hození někam jinam. Potíž je hlavně v situaci, kdy se stejné metody dostanou do vlastní třídy Presenter, což by si člověk řekl, že se asi nikdy nestane, ale třeba u metody flashMessage() se mi to už stalo a musel jsem kvůli tomu vlastní kód předělat.

Netbeans jsem teď vyzkoušel (tu betu) a oproti Eclipse PHP teda nic moc – Eclipse má suggest a navázání na dokumentaci daleko promakanější. Taky podstatně líp pracuje s dokumentačníma komentářema, todo listy atp.

Ondřej Mirtes
Člen | 1536
+
0
-

Díky za rady. Až na tu podporu šablon mi NetBeans vyhovují (možná proto, že jsem nepoznal zatím nic lepšího) :)

Mám dotaz – hraji si s komponentami a přemýšlím, jaké to bude nasadit Nette na první webovou prezentaci :) A rád bych si vytvořil komponentu či sadu metod v Presenteru na vygenerování menu – vstup (třeba z configu) by byly názvy položek a výsledek vykreslování <ul> struktura v HTML. Jelikož bych ale nechtěl nějak „z továrny“ omezovat hloubku toho menu, potřeboval bych tam nějak nasadit rekurzivní volání (položky by byly uložené jako stringy v poli a pokud by prvek pole bylo pole, nasadila by se rekurzivně metoda. Jenže kde tohle volat?
Pokud bych měl jen menu první úrovně, tak je mi to jasné – v Presenteru naplním $this->template->pole a v šabloně zavolám:

<ul>
	{foreach $pole as $item}
	<li>{$item}</li>
	{/foreach}
</ul>

Jenže pokud to chci udělat univerzálně pro libovolný počet úrovní, tak nevím, abych hned ze začátku něco „nevepříkoval“. Jako jedno řešení mě napadlo, že by v šabloně byla v tom základním foreachi v případě že is_array($item) rekurzivně volaná funkce z Presenteru. Jenže to bych naboural oboustranně MVP návrh – v Presenteru bych musel mít HTML kód a v šabloně volání PHP funkce :)

Nebo se to dělá úúplně jinak? :o)

David Grudl
Nette Core | 8109
+
0
-

Ten úvodní LastHunterův příspěvek, jako bych slyšel sebe před pár lety :-)

David Grudl
Nette Core | 8109
+
0
-

LastHunter napsal(a):

Kam bych měl psát třeba vlastní metody, které využiji v každé prezentaci?

Začni tím, že tam nedávej nic :-)

Vše, co má nějak ovlivňovat způsob vykreslování, vložím do oddělené třídy např. Helpers (viz třeba tohle) a v presenteru doplním createTemplate() o registraci filtrů. Například tak lze přidat filtr na dělání „title“.

Vše, co manipuluje s databází, se soubory atd, šoupnu do samostatných tříd v adresáři models.

Ideální je, aby se

  • logika v šablonách omezila na iterace, if, else.
  • logika v presenteru omezila na
    • plnění šablon a registraci helperů a filtrů
    • sestavení stromu komponent
    • úkolování tříd z modelu

Poslední otázka: Jelikož Nette přichází se spoustou vlastních metod, tříd a proměnných, musel bych si je všechny pamatovat, abych je mohl při psaní aplikovat. Lze nějakým způsobem donutit některé IDE, aby mi po napsání názvu třídy nabízelo všechny metody a proměnné, ke kterým mohu v dané třídě přistupovat

IDE je nejlepší předhodit verzi Nette, která je v distribuci uložena v adresáři PHP-5.2. Tedy dokud nebudou IDE přepraveny na jmenné prostory.

Pokud bych měl jen menu první úrovně, tak je mi to jasné – v Presenteru naplním $this->template->pole a v šabloně zavolám:

<ul>
	{foreach $pole as $item}
	<li>{$item}</li>
	{/foreach}
</ul>

Tohle lze vyřešit i čistě na úrovni šablony a to pomocí {include '@menu.phtml', 'menu' => $pole}, kde $pole bude celý strom. A pak do souboru @menu.phtml dáš:

<ul>
	{foreach $menu as $item}
	<li>{if is_array($item)} {include '@menu.phtml', 'menu' => $item} {else}{$item}{/if}</li>
	{/foreach}
</ul>

(vyžaduje rev. 186)

kravčo
Člen | 721
+
0
-

Keď má mať menu neobmedzenú hĺbku, jedno z možných riešení je spraviť si komponent Menu, ktorý bude mať rekurzívnu štruktúru v sebe a bude sa vedieť rekurzívne vykresliť:

class Menu extends Control
{
    protected $items;

    function loadItems()
    {
        $this->items = array(
            (object) array(
                'text' => 'Novinky',
                'dest' => 'News:',
                'sub' => new Menu(...),
            ),
            (object) array(
                'text' => 'Kontakt',
                'dest' => 'Contact:',
                'sub' => new Menu(...),
            ),
        );
    }

    function render()
    {
        $file = Environment::expand('%templatesDir%/components/Menu.phtml');
        $this->template->setFile($file);

	$this->template->items = $items;

	$this->template->render();
    }
}

A šablóna Menu.phtml napríklad takto:

<ul>
    {foreach $items as $item}
    <li><a href="{link $item->dest}">{$item->text}</a>
        {if isset($item->sub)}{!$item->sub->render()}{/if}
    </li>
    {/foreach}
</ul>

Samozrejme, to generovanie štruktúry sa očakáva z konfiguráku či odinakiaľ…

PetrP
Člen | 587
+
0
-

LastHunter napsal(a):

… Bojím se, zda dokážu Nette a jeho schopnosti využít k těm věcem, které jsem popsal výše, zda nebudu dále psát ten špatný kód a jen to budu mít zbytečně obalené mocným frameworkem, který nevyužiji. Dle toho textu to může vypadat, že jsem řádné programátorské prase :) Ano, jsem…

Dobrý framework s tebe neudělá dobrého programátora, myslím že dokonce může být i na škodu. Lepší je si na všechno pomalu přijít sám a až pak začít používat „pomůcky“.

David Grudl napsal(a):

IDE je nejlepší předhodit verzi Nette, která je v distribuci uložena v adresáři PHP-5.2. Tedy dokud nebudou IDE přepraveny na jmenné prostory.

Jaký nástroj používáš ty Davide? Myslím, že si se o tom někde už zmiňoval, ale nemůžu si vzpomenout.

sairon
Člen | 32
+
0
-

David všude oslavuje PHPEd. Dle mého právem :)

romansklenar
Člen | 655
+
0
-

Jo PhpEd je hodně dobrý, ale kde válcuje konkurenci je napovídání kódu :) tam nemá konkurenci a celkem to i nechápu, většina IDEček se totiž omezuje jen na napovídání podle type hintingu při definici metod.

Jod
Člen | 701
+
0
-

Škoda, že neni aj na mac :(

David Grudl
Nette Core | 8109
+
0
-

David Grudl napsal(a):

Tohle lze vyřešit i čistě na úrovni šablony a to pomocí {include '@menu.phtml', 'menu' => $pole}, kde $pole bude celý strom. A pak do souboru @menu.phtml dáš:

<ul>
	{foreach $menu as $item}
	<li>{if is_array($item)} {include '@menu.phtml', 'menu' => $item} {else}{$item}{/if}</li>
	{/foreach}
</ul>

Sám se doplním ;) Od rev. 189 se lze obejít i bez pomocného souboru: (ale jde o experimentální vlastnost)

{block #menu}
<ul>
	{foreach $menu as $item}
	<li>{if is_array($item)} {include #menu, 'menu' => $item} {else}{$item}{/if}</li>
	{/foreach}
</ul>
{/block}
Ondřej Mirtes
Člen | 1536
+
0
-

David: Díky za rady co kam mám „strkat“ i dodělání elegantní rekurze :)

Na přechod na nějaký placený editor se fakt necítím, nemyslím si, že bych využil jeho featury, stačí mi jen obarvování a napovídání při psaní kódu :)

Musím si ještě pořádně nastudovat jednotlivé metody z životního cyklu presenteru a během zkouškového se vrhnu na jeden větší projekt, který tu mám připravený. Takže pak budou určitě následovat další otázky :)

Zatím dík!

Ondřej Mirtes
Člen | 1536
+
0
-

Ahoj,
začínám vývoj prvního mého webu postaveného na Nette pomalu rozjíždět a řekl jsem si, když už to budu dělat „ponovu“, tak se vším všudy :) (nette/dibi/texy).
Chci se zeptat – je stále aktuální ta syntaxe z článku http://latrine.dgx.cz/…nette-s-texy ? Kam mám texy.php includovat?

Díky.

tark
Člen | 22
+
0
-

Není. Ale při aktivaci nějakého Texycosi filtru v šablonách funguje syntax <texy>…</texy> ;)

stpnkcrk
Generous Backer | 189
+
0
-

tark: Zkoušel jsem to, ale nějak to <texy> ... </texy> nefunguje…

_Martin_
Generous Backer | 679
+
0
-

Ahoj, s použitím <texy> zkušenosti nemám, sám používám Texy jako helper:

  • v presenteru:
protected function beforeRender()
{
	// Texy...
	$this->texy = new Texy();
	// ...a jeho konfigurace
	$this->texy->allowedTags = Texy::NONE;
	$this->texy->allowedStyles = Texy::NONE;
	$this->texy->setOutputMode(Texy::XHTML1_STRICT);
	// atd...

	// registrace helperu
	$this->template->registerHelper('texy', array($this->texy, 'process'));
}
  • v šabloně:
{block|texy}
**tučné**, *kurziva*
{/block}
nebo
{!$promenna|texy}
Ondřej Mirtes
Člen | 1536
+
0
-

Díky, využiju! :)

Teď mám ale problém. Mám odkazy normálně ve tvaru

<li><a href="{plink Default:}">Aktuality</a></li>

Ale výsledek je takovýto:

<li><a href=""\/"">Aktuality</a></li>

Pokud presenter neexistuje, tak to error hází až za ty uvozovky

<li id="galerie"><a href=""error: Cannot load presenter 'Gallery', class 'GalleryPresenter' was not found in 'D:\\Weby\\html\\AlanWake\\html\/..\/app\/presenters\/GalleryPresenter.php'."">Galerie</a></li>

Ovlivnilo mi to takto odkazy v celém @layout.phtml (jsem teprv ve fázi řezání). Nikde jsem nic neměnil, čím by to mohlo být?

Díky.

Jod
Člen | 701
+
0
-

Skús sa mrknúť do rout.

Error hádže do úvodzoviek kukaj ""error:.. ""

Ondřej Mirtes
Člen | 1536
+
0
-

Tak v routách to není :( Měl jsem v bootstrap.php omylem nějaké ty defaultní, ale zakomentoval jsem a problém trvá stále :(

Edit: Do uvozovek to háže i link na existující presenter…:

""\/""

Edit2: Je veřejně uvolněný ten polo-wysiwyg editor pro Texy, co je zde na fóru?

Editoval LastHunter (21. 1. 2009 11:50)

Mas3r
Člen | 116
+
0
-

Ten editor se jmenuje Texyla. Najdeš na texyla.jaknato.com

Editoval Mas3r (21. 1. 2009 12:23)

sairon
Člen | 32
+
0
-

Novější verze Texyly (stejná jako na SVN?) je dostupná tady: http://texyla.janmarek.net/

tark
Člen | 22
+
0
-
abstract class BasePresenter extends Presenter
{

    public function beforeRender()
    {
	// texyElements filter
        TemplateFilters::$texy = new Texy;
        TemplateFilters::$texy->encoding = 'utf-8';
        $this->template->registerFilter('TemplateFilters::texyElements');

	// další filtr, třeba netteLinks...
        $this->template->registerFilter('TemplateFilters::netteLinks');
    }

A <texy> funguje. Dodám, že všechny presentery musí dědit buď BasePresenter, nebo nějaké jeho potomky…

Editoval tark (21. 1. 2009 19:56)

David Grudl
Nette Core | 8109
+
0
-

LastHunter napsal(a):

Teď mám ale problém. Mám odkazy normálně ve tvaru

<li><a href="{plink Default:}">Aktuality</a></li>

To je zvláštní… Jaké všechny filtry máš zaregistrované a v jakém pořadí?

Ondřej Mirtes
Člen | 1536
+
0
-

Jen CurlyBracketsFilter. Ještě včera bylo vše OK, určitě to bude o nějakém jednom zašitém řádku bůhví kde.

Kdyby se vám chtělo zkoumat zdroják, tak tady je: link (bez složky libs, kde je aktuální Nette a Dibi)

Říkám, zatím jsem jen ve fázi řezání/psaní HTML, takže všechno HTML je v @layout.phtml a je založený akorát BasePresenter a DefaultPresenter.

Editoval LastHunter (21. 1. 2009 23:04)

David Grudl
Nette Core | 8109
+
0
-

Už to vidím, kontextové escapování je na vině. Pokusím se vyřešit.

Ondřej Mirtes
Člen | 1536
+
0
-

Co jsem pokazil? :)

Takovéto podpory přímo od autora si velice vážím. Sám doufám, že se s Nette (a případně i Dibi a Texy) sžiju, moje weby získají konečně nějakou tvář. Je obdivuhodné, jaké zázemí pro webdesign dokázal „one-man team“ vytvořit :)

David Grudl
Nette Core | 8109
+
0
-

tak je to opraveno v poslední revizi

Ondřej Mirtes
Člen | 1536
+
0
-

Super, dík.
Mám otázku ohledně licence/licencí – dejme tomu, že udělám zákazníkovi web založený na tripletu Nette/Dibi/Texy a dostanu za něj zaplaceno. Jaké povinnosti mám v tu chvíli vůči tobě? Zaplacení poplatku či jen uvolnění pod GNU/GPL? (v případě, že chci)
Co obnáší uvolnění kódu pod GNU/GPL v takové situaci? Přibalení textu licence k projektu a povolení, ať si s tím zákazník dělá naprosto, co chce? (např. použít můj kód a prodávat můj CMS dál?)

David Grudl
Nette Core | 8109
+
0
-

Nette a dibi mají velmi volnou licenci, vyplývající povinnosti jsou z textu srozumitelné. Texy je pod striktnější GPL. Otázkou je, zda-li vůbec lze šířit open source projekt používající Nette/Dibi/Texy (asi ne, nejspíš budu muset Nette & dibi vydat i pod GPL). V případě komerčního prodeje není s Netta & Dibi žádný problém (stačí ponechat copyrighty), u Texy je potřeba pořídit komerční licenci.