Že by nejrevolučnější část Nette 2.0?
#1 před rokem
- David Grudl
- Administrator

- Registrovaný: 8. 2. 2005
- Příspěvky: 5835
Že by nejrevolučnější část Nette 2.0?
Zatím jen ve stručnosti: příklad dvou aplikací, které nepoužívají
Nette\Application\UI a jsou doslova „jednosouborové“: Micro-blog a Micro-tweet (viz Github).
Nette tak lze používat jako micro-framework i jako plnohodnotný framework zároveň. Bez nutnosti se učit něco nového. Micro-framework přitom disponuje vším, co dělá Nette nettem, tj. pořádné ladící nástroje, nadupaný šablonovací systém, zabezpečení, silný routovací jazyk, podporu HTML5, SEO. Například i zmíněný Micro-blog udržuje kanonický tvar URL – zkuste si přejít o stránku vpřed a vzad.
Přitom se skládá vlastně jen ze souboru index.php a ze šablon. Ty
obsahují routovací
pravidla v makře {url ...} vytahují si data z modelu.
V tomto případě je model natolik jednoduchý, že si vystačí
s Nette\Database.
#2 před rokem
- veena
- Člen

- Registrovaný: 12. 2. 2008
- Příspěvky: 129
Re: Že by nejrevolučnější část Nette 2.0?
Supr! Teď ještě podobně jednoduše tu část blogu případně twitteru, kterou ty data můžeš příjemně naplnit (admin) :-)
The Web is our DNA!
#3 před rokem
- Jan Tvrdík
- Nette guru

- Registrovaný: 13. 4. 2008
- Příspěvky: 1262
Re: Že by nejrevolučnější část Nette 2.0?
Adminer Editor? :)
#4 před rokem
- Lopo
- Nette guru

- Registrovaný: 29. 5. 2009
- Příspěvky: 282
Re: Že by nejrevolučnější část Nette 2.0?
mozno by nebolo odveci nalinkovat tie 2 nove example aj priamo na http://examples.nette.org/
#5 před rokem
- grey
- Člen

- Registrovaný: 30. 8. 2010
- Příspěvky: 102
Re: Že by nejrevolučnější část Nette 2.0?
Lopo wrote:
mozno by nebolo odveci nalinkovat tie 2 nove example aj priamo na http://examples.nette.org/
A možná by ty současné mohly fungovat ;)
#6 před rokem
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Že by nejrevolučnější část Nette 2.0?
Po delší době plné pro mě nepodstatných změn zase jedna nová funkce, u které sedím s otevřenou pusou. Super! :-)
Jinak, bude ten TemplateRouter v rozšířeních , nebo přímo ve
frameworku?
#7 před rokem
- enoice
- Nette guru

- Registrovaný: 1. 9. 2006
- Příspěvky: 333
Re: Že by nejrevolučnější část Nette 2.0?
Na páté straně je prázdno. Ale jinak moc pěkná fičůrka.
Editoval enoice (2. 6. 2011 14:31)
#8 před rokem
- Felix
- Člen

- Registrovaný: 4. 7. 2010
- Příspěvky: 114
Re: Že by nejrevolučnější část Nette 2.0?
Ten TemplateRouter.php je fakt skvelej ;-) By skoro mohl byt addon. Btw, neni to inspirovano zarovkou? Neco podobneho jsem tam videl. Ikdyz ono v latte lze definovat jakykoli tag.
@xf3l1× | http://www.jfx.cz/ | Karta stastna, vecere slastna.
#9 před rokem
- bojovyletoun
- Nette guru

- Registrovaný: 6. 10. 2010
- Příspěvky: 672
Re: Že by nejrevolučnější část Nette 2.0?
Jo je to fakt pěkný, takhle jsem si představoval tu úpravu __Micro__
presenteru. Jsou normálně dostupné parametetry, ty co neuvedu mám doostupné
skrz $presenter->request->params (i v šabloně). (Pro úplnou
dokonalost bych si dokázal představit $params a $context jako parametr
šablony i routovacího callbacku (context je v šabloně už teď.,
v presenteru je dostupný skrz use.)
MicroPresenter:
L92: +$template->params= $this->request->getParams();
L58: +$params['params'] = $params;
L59: +$params['context'] = $this->context;
Jo a ohledně templaterouteru(akademická): skvělá věc:, občas ale to má
kolizi s parserem (modifikátory), že např {url x|y} vtovří
x. Jelikož jsou modifikátory zakořeněné už v parseru, jde to
nějak ošetřit uzavřením do uvozovek (a následným použitím tokenizéru)
a nebo rovnou psát ˙{url}cokoli{/url}
edit: formátováni
Editoval bojovyletoun (3. 6. 2011 0:38)
Nette 2dev from github/Netbeans 7.0.1/(Tortoise)git/
Apache 2.4/fcgid/PHP 5.3.9+xdebug+wincache
#10 před rokem
#11 před rokem
- bojovyletoun
- Nette guru

- Registrovaný: 6. 10. 2010
- Příspěvky: 672
Re: Že by nejrevolučnější část Nette 2.0?
zejdnodušená metoda createTemplate ..
Ps: Api ukazuje minifik. verzi: http://api.nette.org/…ce-.php.html#539, ale jiné třídy jsou ok
Nette 2dev from github/Netbeans 7.0.1/(Tortoise)git/
Apache 2.4/fcgid/PHP 5.3.9+xdebug+wincache
#12 před rokem
- David Grudl
- Administrator

- Registrovaný: 8. 2. 2005
- Příspěvky: 5835
Re: Že by nejrevolučnější část Nette 2.0?
A já si říkal, proč najednou začalo být Apigenu 128MB RAM málo… ;-)
#13 před 11 měsíci
- ptacek.pavel
- Člen

- Registrovaný: 12. 4. 2011
- Příspěvky: 25
Re: Že by nejrevolučnější část Nette 2.0?
@Felix inspirace žárovkou je více než zjevná, nicméně je víc mikro, než jsme implementovali my :-)
edit: smazáno
Editoval ptacek.pavel (19. 6. 2011 12:56)
#14 před 11 měsíci
- HosipLan
- Nette guru

- Registrovaný: 1. 6. 2009
- Příspěvky: 2637
Re: Že by nejrevolučnější část Nette 2.0?
@ptacek.pavel: Určitě nejsem sám, kdo by ocenil vlastní vlákno na takovou věc. Měl jsem pár připomínek, ale na mail ti je psát nebudu a sem se to nehodí :) Příště zakládej vlákna ;)
Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHub | CMS Kdyby
Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni
#15 před 11 měsíci
- ptacek.pavel
- Člen

- Registrovaný: 12. 4. 2011
- Příspěvky: 25
Re: Že by nejrevolučnější část Nette 2.0?
@HosipLan: téma máš zde: http://forum.nette.org/…-v-sablonach :-)
#16 před 9 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Že by nejrevolučnější část Nette 2.0?
Je nějaká možnost používat v micro-frameworku vykreslitelné komponenty?
Např:
$container->router[] = new Route('clanky/', function($presenter){
$template = $presenter->createTemplate();
... //nastavení cesty k šabloně, naplnění dat šablony
$presenter['visualPaginator'] = new VisualPaginator(); //toto předpokládám nepůjde
$template->render();
});
Díky
Editoval xxxObiWan (14. 8. 2011 23:04)
#17 před 9 měsíci
- HosipLan
- Nette guru

- Registrovaný: 1. 6. 2009
- Příspěvky: 2637
Re: Že by nejrevolučnější část Nette 2.0?
Vskutku, MicroPresenter vůbec není komponenta, ani kontejner.
Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHub | CMS Kdyby
Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni
#18 před 9 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Že by nejrevolučnější část Nette 2.0?
Na API jsem se právě díval a připadalo mi, že to moc věcí asi umět nebude :-)
Je nějaká možnost, jak Nette přimět, aby místo MicroPresenteru
předával mojí funkci instanci mé třídy
MyMicroPresenter?
Protože tady ani nebude možnost využívat snippety a
invalidateControl atd. :-( Je to škoda, že tak skvěle
vypadající věc, jako Nette micro-framework, není dotažená do konce (rád
pošlu pull-request až něco dopíšu :-))
#19 před 9 měsíci
- HosipLan
- Nette guru

- Registrovaný: 1. 6. 2009
- Příspěvky: 2637
Re: Že by nejrevolučnější část Nette 2.0?
Něco mi říká, že jsi nepochopil jeho účel. Má být jednoduchý. Kam do věty „Má být jednoduchý.“ chceš prosimtě nacpat slovo „snippet“?
MicroPresenter je v NetteModule, takže když si ho
zkopíruješ a upravíš jak potřebuješ, stačí si ho nastavit do routeru.
Funguje to úplně stejně jako s normálním presenterem.
Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHub | CMS Kdyby
Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni
#20 před 9 měsíci
- Tharos
- Nette guru

- Registrovaný: 9. 10. 2009
- Příspěvky: 377
Re: Že by nejrevolučnější část Nette 2.0?
Projdi si ty ukázky v examples, řídí
to standardně třída Route. Není problém jí klasickým
způsobem přimět, aby routovala na Tvůj vlastní
MyMicroPresenter. Nicméně trochu se tím zastírá to „mikro“
:), protože pak to bude spíš už klasické, sic minimalistické,
použití Nette.
Edit: Tak mě HosipLan předběhl :), ale tak alespoň pro potvrzení tu ponechávám i svůj post.
Editoval Tharos (15. 8. 2011 10:04)
#21 před 9 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Že by nejrevolučnější část Nette 2.0?
Není problém jí klasickým způsobem přimět, aby routovala na Tvůj vlastní
MyMicroPresenter.
Jak, když string ‚Nette:Micro‘ je tam natvrdo? :-)
127: self::PRESENTER_KEY => 'Nette:Micro',
Pomůže asi to, co říká HosipLan, do složky
presenters/NetteModule nahrát MicroPresenter.php a
Nette by ho mělo načíst přednostně.
Něco mi říká, že jsi nepochopil jeho účel. Má být jednoduchý. Kam do věty „Má být jednoduchý.“ chceš prosimtě nacpat slovo „snippet“?
Zdá se mi, že teď přede mnou obhajuješ Nette. V žádném případě jsem to nemyslel tak, že je Nette nedodělané, ani nijak jinak špatně ;-) Ale možnost používání snippetů a controlů přece používání micro-frameworku nijak nezesložití. Bude se používat pořád stejně jednoduše, jen s ním půjde udělat více věcí :-)
#22 před 9 měsíci
- Tharos
- Nette guru

- Registrovaný: 9. 10. 2009
- Příspěvky: 377
Re: Že by nejrevolučnější část Nette 2.0?
xxxObiWan napsal(a):
Jak, když string ‚Nette:Micro‘ je tam natvrdo? :-)
No třeba tak, že při vytváření instance Route nebudeš
předávat metadata jako closure či callback, ale jako pole. :) Pak si můžeš
namapovat jakýkoliv presenter (a ten nemusí vůbec být potomkem třídy
Presenter, stačí, aby implementoval rozhraní
IPresenter).
#23 před 9 měsíci
- HosipLan
- Nette guru

- Registrovaný: 1. 6. 2009
- Příspěvky: 2637
Re: Že by nejrevolučnější část Nette 2.0?
Pak ale ztrácí význam MicroPresenter.
Neobhajuji Nette (teda vlastně jo), ale zkus se nad tím zamyslet. Ta třída má ve jméně „Micro“.
Můžeš si udělat vlastní MicroRouter, který bude umět
žrát closury a bude používat výchozí presenter (snippety,
komponenty, …)
Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHub | CMS Kdyby
Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni
#24 před 9 měsíci
- Patrik Votoček
- Nette Evangelist

- Registrovaný: 8. 3. 2008
- Příspěvky: 2122
Re: Že by nejrevolučnější část Nette 2.0?
MicroPresenter slouží v Nette jenom a pouze ke spouštění callbacků. Pokud s ním potřebuješ pracovat jakkoli jinak používej ho jako klasický presenter tj. používej klasická metadata u routy (string / pole) a né callback).
Btw kolem snippetů a komponent je poměrně hodně režie a to se slovem Micro už moc společného nemá.
Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce
všechno jde.“
#25 před 9 měsíci
- Tharos
- Nette guru

- Registrovaný: 9. 10. 2009
- Příspěvky: 377
Re: Že by nejrevolučnější část Nette 2.0?
Jinak dodám, že celé Nette vůbec není problém použít tak, abys měl namísto obsáhlého bootstrapu jen pár řádků v index.php a na serveru jenom nette.min.php, index.php, jeden presenter.php, temp a třeba tři šablony někde v templates. Pak se to bude na pohled velmi podobat těm micro-ukázkám a budeš moci využít plné síly Nette.
Teď už je ale jen otázka, jaký to má smysl. :) A proč nepoužít Nette „klasickým“ způsobem.
Editoval Tharos (15. 8. 2011 10:54)
#26 před 9 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Že by nejrevolučnější část Nette 2.0?
Smysl je u tohohle čistě subjektivní ;-) U malých webů ve stylu ‚5 článků/kontaktní formulář/možná jedna fotogalerie‘ se mi nechce vytvářet presenter(y) a při psaní kódu se přepínat mezi soubory v editoru atd. Kódu je v takové „aplikaci“ tak málo, že je přehledný i pokud je jen v jednom souboru.
U microsites se mi prostě líbí minimalističnost ve stylu Limonade, ale přitom nechci přijít o sílu Nette, na kterou jsem si tak zvykl :-)
HosipLanovi a Tharosovi děkuji za pomoc tady i na jabberu, konečné řešení nakonec vypadá takto:
$container->router[] = new Route('clanky/', array(
'presenter' => 'MyMicro',
'callback' => function($presenter){
...
},
));
Editoval xxxObiWan (15. 8. 2011 11:16)
#27 před 9 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Že by nejrevolučnější část Nette 2.0?
Tharos napsal(a):
Jinak dodám, že celé Nette vůbec není problém použít tak, abys měl namísto obsáhlého bootstrapu jen pár řádků v index.php a na serveru jenom nette.min.php, index.php, jeden presenter.php, temp a třeba tři šablony někde v templates. Pak se to bude na pohled velmi podobat těm micro-ukázkám a budeš moci využít plné síly Nette.
Tak bohužel to není vůbec tak jednoduché, jak říkáš. Chtěl jsem, aby
mi v „jednosouborové verzi“ fungovaly snippety a vykreslitelné
komponenty. Řekl jsem si, že využiju třídy
Nette\Application\UI\Presenter, kde už všechno tohle funguje.
Myslel jsem si „To bude jednoduché, podědím Application\UI\Presenter,
změním pár řádků a bude to“. Jenže:
- Některé metody, které jsem k tomuto účelu potřeboval změnit, jsou private, takže banán – dědit nemůžu
- Řekl jsem si tedy: „Tak ten Nette Presenter zapouzdřím“.
Jenže Nette Presenter je
abstract, takže ani zapouzdření není možné - Je tedy nějaká jiná cesta, než psát funkčnost pro snippety a vykreslitelné komponenty do MyMicroPresenteru celé odznova, nebo copypastovat stovky řádků z Nette Presenteru?
Díky
#28 před 9 měsíci
- Tharos
- Nette guru

- Registrovaný: 9. 10. 2009
- Příspěvky: 377
Re: Že by nejrevolučnější část Nette 2.0?
Je to skutečně tak jednoduché, jak jsem psal, ale bohužel jsi asi nepochopil, jak jsem to myslel…
Aby znovu nedošlo k nedorozumění, zde máš ukázku. A máš tam i ten AJAX. :)
Šlo by to klidně ještě i více zredukovat (co se počtu souborů týče), ale tohle považuji za takové smysluplné minimum. Těm micro-examples to myslím obstojně konkuruje.
Editoval Tharos (21. 8. 2011 21:10)
#29 před 9 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Že by nejrevolučnější část Nette 2.0?
@Tharos: Díky, ale to se mi nelíbí. Kromě změněného umístění šablon je to klasické MVC Nette. Když budu chtít přidat další URL/pohled, budu muset buď vytvořit nový presenter, nebo novou action do DefaultPresenteru + editovat routy v bootstrapu → prostě Nette klasika. K micro-frameworku se to moc neblíží.
Hledám způsob, jak rozšířit MicroPresenter, aby šly použít snippety a vykreslitelné komponenty.
#30 před 9 měsíci
- Jan Tvrdík
- Nette guru

- Registrovaný: 13. 4. 2008
- Příspěvky: 1262
Re: Že by nejrevolučnější část Nette 2.0?
MicroPresenter rozšíříš dost těžko, vzhledem k tomu, že naprostá většina kódu Presenteru se stará právě o to, aby snippety a vykreslitelné komponenty fungovali. Řešením tedy není rozšířit MicroPresenter, ale rozšířit Presenter o schopnosti MicroPresenteru.
#31 před 9 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Že by nejrevolučnější část Nette 2.0?
Ono se dost špatně rozšiřuje Nette Presenter, když většina metod i proměnných, které se v něm o snippety starají, jsou private. Jsem opravdu bezradný.
EDIT: A tím spíš, když polovině kódu Nette Presenteru nerozumím :D
Editoval xxxObiWan (22. 8. 2011 12:26)
#32 před 9 měsíci
- Jan Tvrdík
- Nette guru

- Registrovaný: 13. 4. 2008
- Příspěvky: 1262
Re: Že by nejrevolučnější část Nette 2.0?
Nestačí přepsat metodu run?
#33 před 9 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Že by nejrevolučnější část Nette 2.0?
@Jan Tvrdík: Teď jsem půl hodiny koukal do kódu a asi máš pravdu, zkusím to nějak sepsat a výsledek dám sem, pokud bude funkční ;-)
EDIT: Tak zatím to vypadá, že funguje tohle. Snad se mi do toho už podaří dopasovat y snippety a komponenty
use Nette\Application,
Nette\Application\Responses,
Nette\Http;
class MiniPresenter extends \Nette\Application\UI\Presenter
{
public function run(Application\Request $request)
{
// Call user callback
$params = $request->getParams();
$params['presenter'] = $this;
callback($params['callback'])->invokeNamedArgs($params);
// Response
return parent::run($request);
}
public function canonicalize()
{
return; // fix exception: Object of class Closure could not be converted to string
}
}
EDIT2: Tak AJAX s tím funguje perfektně, ani nebylo potřeba do MiniPresenteru nic doplňovat :-)
Editoval xxxObiWan (22. 8. 2011 15:12)
#34 před 9 měsíci
- voda
- Nette guru

- Registrovaný: 26. 4. 2010
- Příspěvky: 335
Re: Že by nejrevolučnější část Nette 2.0?
Pokud z před voláním parrent::run() odstraníš z
$params callback, tak pak asi ani nemusíš přepisovat metodu
canonicalize().
#35 před 9 měsíci
#36 před 9 měsíci
- voda
- Nette guru

- Registrovaný: 26. 4. 2010
- Příspěvky: 335
Re: Že by nejrevolučnější část Nette 2.0?
To sice jo, ale $params je pole, takže se předává
referencí, ne? Takže by ani nemělo být potřeba je zpátky nastavovat.
#37 před 9 měsíci
#38 před 9 měsíci
- voda
- Nette guru

- Registrovaný: 26. 4. 2010
- Příspěvky: 335
Re: Že by nejrevolučnější část Nette 2.0?
V tom případě se omlouvám za mystifikaci, z těch referencí jsem v tom PHP vždy zblblej…
Poslední možností je $request naklonovat. Jinak místo
přepsání canonicalize() bude asi lepší nastavit
$autoCanonicalize na false.
#39 před 9 měsíci
- PJK
- Člen

- Registrovaný: 20. 6. 2010
- Příspěvky: 73
Re: Že by nejrevolučnější část Nette 2.0?
To vypadá dobře, používám Silex (https://github.com/fabpot/Silex), teď to konečně budu moci všechno krásně sjednotit :)