nette komponenta s vice metodami render

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

Ahoj,
Nasel jsem tady na tuto otazku vice odpovedi, ale kazda byla jina. Chtel bych se zeptat jake je aktualni reseni problemu.

Jedna se o to, ze budu mit jednu komponentu, a ta bude mit vice metod render. Napriklad klasicky render pouziju pro navstevnika webu. renderAdmin() pro zobrazeni informaci o komponente povolane osobe atd.

Diky za opoved.

Marek Šneberger
Člen | 130
+
+5
-

No a otázka zní? Jestli se ptáš na to, jestli komponenta může mít víc render metod tak ano. {control komponenta} zavolá render(), {control komponenta:admin} zavolá renderAdmin() v dané komponentě.

//Edit @DavidMatějka díky, opravil jsem :-)

Editoval Marek Šneberger (28. 2. 2015 10:11)

Cup
Člen | 38
+
0
-

Jee, ono je to tak jednoduche. Diky moc!

David Matějka
Moderator | 6445
+
+2
-

jen upresnim, {control komponenta} zavola metodu render, ne renderDefault

Ale pri pouziti pohledu komponent mej na pameti, ze se (mimojine) nekamaradeji s ajaxem. Ja jejich pouziti prilis nedoporucuju.


A co tedy pouzit? Ve vetsine pripadu o tom, jak se komponenta ma vykreslit, vis uz v presenteru. Takze v tovarnicce rovnou nastavis parametry komponenty

protected function createComponentFoo()
{
	$foo = new FooControl();
	$foo->setView('bar');
	return $foo;
}

komponenta pak akorat v render metode nastavi spravnou sablonu.

Ale v tvem pripade bych premyslel, zda nebude lepsi vytvorit dve komponenty – jednu public, jednu pro admina.

Cup
Člen | 38
+
0
-

Je diky.
No nejakym zpusobem se mi to povedlo, ajax jsem jeste neresil.
Co kdybych ale mel v te komponente s view pro admina nejaky formular. Tak nejak sem hledal, ze se mi nepovede odeslat vysledky tohoto formulare metode do teto komponenty. Ale pokousi se to odchytit presenter, kde se komponenta vytvari. Teda tak to chapu. Je to docela nemile. Mel jsem predstavu ze v tom rozhranni pro admina budu pouzivat napriklad prave formular s upravou nastaveni v db, podle ktereho se nasledne bude vykreslovat ten klasickej view.

Do presenteru se mi to nechce davat, z toho duvodu, ze komponent muze byt 50 ruznejch, v nich 50 ruznejch formularu a ja bych rad upravoval vzdy pouze kod te komponenty, ne presenteru.

Asi nerealizovatelne co?

Šaman
Člen | 2666
+
0
-

Formuláře v komponentě normálně fungují. Jestli tobě ne, děláš něco špatně. Pošli ideálně odkaz na tvůj kód na GitHubu, BitBucketu apod.

Cup
Člen | 38
+
0
-

uz mi to doslo …
mel jsem vytvareni komponenty v metode render, kdyz jsem ji dal do action, tak to jde. :] Diiiky vsem. Nakoplo me to, ze jste mi rekl, ze by to nemel byt problem.

Editoval Cup (28. 2. 2015 17:08)

Marek Šneberger
Člen | 130
+
0
-

Vytváření komponenty v action? Whaaaaaat? To zní jako průser, můžeš ukázat kód? Form by měl být ve vlastní továrničce v té komponentě…

Cup
Člen | 38
+
0
-

haha, jo mozna je to pruser. Je to vsechno zatim v ramci pokusu. Nevim jesli to bude fungovat.

Jde o to, ze se pokousim komponenty vytvaret dynamicky, v db mam ulozenen na jake strance jsou jake komponenty a v pripade ze na te strance jsem, tak se v nejakem miste komponenty vytvori … tedy nemam pro 10 stránek, 10 presenterů kde v každém je nějaká továrnička na právě umístěnou komponentu. Mám jeden presenter. Neříkám, že je to dobře. Možná je to úplná blbost a celé to skončí neúspěchem. Jen se snažím nette přiohnout k takovému pokusu. A zatím se mi to celkem daří.

Kdybych měl továrničky, tak to bude fungovat. Ale musel bych je do presenteru dopředu napsat. Já nevím co kde na jaké stránce mám a vlastně ani jaké stránky tam jsou, je to v db.

Přiznávám že jsem neřešil bezpečnost. Ale nemyslím si, že tam dělám nějaké obrovské prasárny. :) Možná se to jen snažím používat jinak, než je Nette navrženo a shořím jako papír ve chvíli kdy se budu snažit něco z ajaxovat.

Čerpám ze zkušeností z BP, kde jsem vytvářel filter (dnes loader) pro xhtml šablonování.

V této době nemůžu zveřejnit zdrojáky. Ale pokusím se to domluvit. Třeba by se to někomu hodilo.

--edit–
psal jsem k továrničkám na komponenty.
továrnička na vlastní form je v té komponentě.
komponentu tedy vytvářím v action. Když ji mám v render, píše mi to, že komponenta neexistuje při pokusu o zpracování formuláře z komponenty

… jo je to složitý. :)

Editoval Cup (1. 3. 2015 10:15)

Cup
Člen | 38
+
0
-

minus –1 je pekna, rikam ze je to v ramci pokusu, mozna by se hodilo rict svuj nazor. Treba ze pokud chci dynamicky vytvaret komponenty na stranky, tak to mam udelat jinak. Nebo ze Kazda stranka v Nette musi mit svoji sablonu v presnem adresari a svuj presenter v jinem a pres to vlak nejede (Toho se snazim zbavit.) :]
Je to –1 k nepouziti diakritky? –1 k memu slohovemu nadani? :] ? takhle to muze byt klidne jen silny zlozvyk z diskusi na novinkach ci idnesu.

Editoval Cup (2. 3. 2015 10:27)

akadlec
Člen | 1326
+
0
-

Ono ohýbání je cesta do pekel a pak skončích jako většina projektů, nette či jiný FW ohli natolik že již je pro ně problém dělat upgrade FW ale musejí se spoléhat na své fixy, tímpádem ve většině případů přicházejí i o možnosti využívat knihovny třetích stran, fixy ve FW a pak to i docela ztrácí přehlednost. To co řešít ty, tedy dynamické komponenty řeším taky, ale šel jsem na to z jiné strany a vytvořil si manager co mě bude tyto předem definované komponenty spravovat. V db či jinde mám pak uložené názvy komponent a jejich konfiguraci, o zbytek se stará manager.

Cup
Člen | 38
+
0
-

Díky, za názor. :) Máš pravdu a zní to zajímavě. Názvy komponenet, jejich třídy i konfiguraci mám také v db. Nad tím manažerem se zamyslím. Ale teď to musím na pár týdnů kvůli škole odložit. Díky a zatím ahoj.