Formulář – dvě šablony – invaliduje se nesprávná šablona

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

Používám formuláře v UI control jako zde . Mámn však formulář, který má dvě šablony a když chci použít toto:

{control tagForm:second}

a následně formulář odešlu a v onSuccess jej invaliduji. Tak se mi vrátí jako snippet, defaultní render() a ne renderSecond.

Jak se to řeší?

honos
Člen | 109
+
0
-

Zkus se podivat sem

EDIT: Sorry, to ti asi nepomuze. Vim ze se tu neco podobneho jiz reseilo a co jsem si z toho odnesl bylo ze se invalidace snippetu ma provadet ne v render<Sub> ale v hlavni render mettode. zkus projit forum..

Editoval honos (9. 1. 2014 12:28)

Jiří Nápravník
Člen | 710
+
0
-

Díky za reakci, já pohledával trochu více a našel, jsem, že tohle jak chci já snad ani nejde při využití ajaxu (logicky mi to dává smysl). A je prý tedy řešením nakonfigurovat si tu komponentu zvenku

akadlec
Člen | 1326
+
0
-

Hele taky jsem to řešil a musel sem to upravit tak že v klasické render metodě si udělám detekci co to je za akci a podle toho nastavím soubor s šablonou. Nějak takto:

class Avatar extends \System\Application\UI\Control
{
	/**
	 * Render component
	 *
	 * @param string $template
	 */
	public function render($template = NULL)
	{
		//...
		//...
		// Detect template by presenter & module
		if ( !$template ) {
			// Render with default template
			$template = self::TEMPLATE_DEFAULT;

			// Person module
			if ( $this->presenter->subModuleName == 'Person' ) {
				if ( $this->presenter->presenterName == 'Profile' ) {
					$template = self::TEMPLATE_PERSON_PROFILE;

				} else if ( $this->presenter->presenterName == 'Settings' ) {
					$template = self::TEMPLATE_PERSON_SETTINGS;
				}
			}
		}

		return !$template ? :$this->renderWithTemplate($this->__toString() . DS . $template);
	}

	public function renderAccountSettings()
	{
		$this->render(self::TEMPLATE_DEFAULT);
	}
}

metoda renderWithTemplate je v abstraktní třídě a zajistí aby se použila šablona ze správného tématu.

Jan Suchánek
Člen | 404
+
0
-

A nemohl by tu detekci znastavivat primo signal formu? Odeslu form a v signalu mu doplnim jake view ma pouzit a v render uz jen doplnim do sablony.

akadlec
Člen | 1326
+
0
-

Tak kde tu detekci šablony dáš je na tobě, ale do signálu, potažmo url bych to teda nedával.

Jan Suchánek
Člen | 404
+
0
-

Fuj, zadny url, primo metoda ktera zpracovava odeslani by nastavila privatni view. A v rendereru by bylo jen predano.

Jan Suchánek
Člen | 404
+
0
-

Do url rozhodne nic necpat.

akadlec
Člen | 1326
+
0
-

to bys musel zase řešit dvě metody pro form a když se ti to zpracovává stejně tak to musíš zase nějak detekovat. Podle mě je lepší to řešit výše.

Jan Suchánek
Člen | 404
+
0
-

akadlec: Pokud mám víc rendererů pro jeden form, co předat přímo setrem typ view a už pak nic neřešit? Tedyk nepoužívat {control tagForm:second} ale jen {control tagForm} a že je second mu předat přímo při výrobě?

honos
Člen | 109
+
0
-

akadlec napsal(a):

Hele taky jsem to řešil a musel sem to upravit tak že v klasické render metodě si udělám detekci co to je za akci a podle toho nastavím soubor s šablonou.

To je přesně to o čem jsem psal.

akadlec
Člen | 1326
+
0
-

@jenicek: je to na každém jak to udělá. Hodit si tam setter je taky možnost. Ono těch cest k výsledku je několik ;)

Jiří Nápravník
Člen | 710
+
0
-

@akadles díky za návrh řešení, ale nakonecj sem zvolil tu možnost už při výrobě nastavit šablonu, podobně jako zmiňuje jenicek

Jan Suchánek
Člen | 404
+
0
-

@Honos:ono ja moc „nechapu“ vyhodu toho ze to zapomene to view ale vlastne ani vyhodu vice stejnych formu s jinym rendererem kdyz ten form resime dnes prez autowiring v neonu tak napsat jinou tovarnu v presenteru uz je sranda ne?

akadlec
Člen | 1326
+
0
-

@jenicek: takže podle tebe je lepší mastit x komponent co jsou stejné a jen se liší šablonou? To není moc ok. Form s různýma šablonama a nebo samotná komponenta s vícero šablonama není problém. Třeba já to mám u editace avatara. Na stránce profilu to chci editovat jedním způsobe a na stránce editace účtu taky jinak a proč bych na to měl psát dvě komponenty když to dělá to samé jen to jinak vypadá?

Jan Suchánek
Člen | 404
+
0
-

@akadlec: netvrdim ze se mi to libi. Smeruje to i pri kazdym handle na zakladni render. Jen me napadlo mit pro kpmponentu, ktera je stejna jen pokazde jinou tovarnicku primo v presenteru a tam setnout jakou chci mit sablonu. K cemu je pak ten odlisny renderer?

Jiří Nápravník
Člen | 710
+
0
-

@akadlec: já myslím, že jsou na mysli ne komponenty, ale továrničky na komponenty. Prostě si udělá vždy továrničku, které nastaví každé přes setter jiný view

Jan Suchánek
Člen | 404
+
0
-

@Jiří Nápravník: Přesně, diky za opravu.

honos
Člen | 109
+
0
-

jenicek napsal(a):

@Honos ja moc „nechapu“ vyhodu toho ze to zapomene to view ale vlastne ani vyhodu vice stejnych formu s jinym rendererem kdyz ten form resime dnes prez autowiring v neonu tak napsat jinou tovarnu v presenteru uz je sranda ne?

Čeče, mně osobně přijde dost ‚prasacke‘ si vytvářet NEON config se 150 řádky kodu a mít xxx komponent jak psal @akadlec Následná úprava může zasáhnout více souboru a mně osobně to připomíná vrásky na jinak růžovém zadečku.. :)

honos
Člen | 109
+
0
-

Jiří Nápravník napsal(a):

@akadlec: já myslím, že jsou na mysli ne komponenty, ale továrničky na komponenty. Prostě si udělá vždy továrničku, které nastaví každé přes setter jiný view

No to jo ale.. Neřešil jsi tady: Formulář – dvě šablony – invaliduje se nesprávná šablona ??
Takže otázkou je, zda to funguje na způsob který nastínil @Jiří Nápravník? Pořad nemám přistup ke svému počítači tak si to nemůžu ověřit ale odpověď ně zajímá.. :)

EDIT: Po chvilce namáháni zrezavělých zezelenalých mozkových zavitu předpokládám že ANO

Editoval honos (15. 1. 2014 18:36)