Vlastní formulářový prvek s šablonou

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

Existuje nějaké best practise pro vytvoření vlastního formulářového prvku (komponenty), který nemá zcela triviální vykreslení?

Čeho chci dostáhnout?
Mám teď formulář, který mi umožňuje výběr obrázku. Po klepnutí na prvek se zobrazí Bootstrap modal okno, které umožňuje buď upload obrázku, nebo zadání url ke stažení. Po výběru to nahraje náhled obrázku.

Protože bych to potřeboval používat opakovaně v různých formulářích, chtěl bych z toho udělat vlastní formulářový prvek/komponentu. Hodilo by se mi mít vlastní šablonu pro ten prvek, protože obsahuje dost HTML, několik inputů.

Objevil jsem tuhle diskusi, ale naznačené řešení se mi moc nelíbí. Jde nějak formulářový prvek propojit s šablonou?

Nebo je lepší to udělat úplně jinak? Nakopne mě někdo správným směrem?

MartinitCZ
Člen | 580
+
0
-

Komponenta má funkci render() a v ní můžeš nastavit šablonu. Viz:
https://github.com/…nControl.php#L112

akadlec
Člen | 1326
+
0
-

A ten tvůj formulář s tímto speciálním formulářovým prvkem obsahuje i další normální formulářové prvky? Nebo jen ten jeden pro ten upload?

BigCharlie
Člen | 283
+
0
-

Obsahuje ještě další inputy. K tomu nějaké to html.

akadlec
Člen | 1326
+
0
-

tak pak zkusit udělat control po vzoru ostatních, jen si nezapomenout uvědomit že by ten control měl vracet nějaká data ;) a nebo to celé postavit jinak, třeba upload zvlášť od hlavního formu. Já tak třeba řeším avatary k účtům. Mám form editace účtu ale upload a uprava avatara je ve vlastní komponentě.

David Kudera
Člen | 455
+
0
-

Kdyžtak si i přečti tento článek o formulářích

hrach
Člen | 1838
+
+1
-

nextras/forms to umi. vcetne signalu apod. https://github.com/…rolTrait.php

BigCharlie
Člen | 283
+
0
-

@hrach to vypadá jako to, co hledám. Díky za tip, zkusím to otestovat.

BigCharlie
Člen | 283
+
0
-

@hrach narazil jsem na chybu „Service templateCacheStorage is deprecated“. Založil jsem issue.