Ž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?

 

#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 TemplateRouterrozšířeních , nebo přímo ve frameworku?


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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

nanuqcz
Nette guru
Registrovaný: 4. 5. 2010
Příspěvky: 615

Re: Že by nejrevolučnější část Nette 2.0?

No jo, teď mi došlo… kde se v šabloně vzala proměnná $presenter? Přeci jsme nikde žádný nevytvářeli.


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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 | GitHubCMS 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)


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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 | GitHubCMS 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 :-))


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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 | GitHubCMS 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í :-)


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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 | GitHubCMS 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)


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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.


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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)


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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)


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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

nanuqcz
Nette guru
Registrovaný: 4. 5. 2010
Příspěvky: 615

Re: Že by nejrevolučnější část Nette 2.0?

Super nápad :-) Zkusil jsem, ale bohužel $request je „frozen“, takže jeho hodnoty už nelze měnit.


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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

nanuqcz
Nette guru
Registrovaný: 4. 5. 2010
Příspěvky: 615

Re: Že by nejrevolučnější část Nette 2.0?

Myslel jsem, že referencí se automaticky předávají jen objekty. Každopádně ani unset($params['callback']) nefunguje.


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#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 :)

 

Zápatí