Jak renderovat FormControl pomocí šablony?

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

Formulář si renderuju ručně pomocí jednotlivých maker {input} {label} atd. To je vše ok.
Vytvořil jsem si nový FormControl abych mohl ve formuláři vytvářet specifická políčka, třeba jako Davidem zmíněný DateInput
Vše je ok, jenže onen DateInput má tvar jak se vyrenderuje dán přímo v sobě pomocí Nette\Utils\Html což je sice pěkné, ale je to dáno natvrdo. Nedalo by se toto nahradit načtením lattéčka? Abych mohl určit jaká šablona se použije? Protože na frontu to chci renderovat pomocí bootstrapu a v backendu zase pomocí UIkitu apod.

LeonardoCA
Člen | 296
+
0
-

Urcite by se dalo i pomoci template, ale predpokladam, ze u formularovych prvku je hlavnim duvodem proc se standartne pouziva Nette\Utils\Html, aby se dalo pracovat s getControlPrototype() a bylo mozno dodatacne v pripade potreby jednoduse pridavat prvku class, apod.

akadlec
Člen | 1326
+
0
-

no jo jenže to mi přidá nějaký class či změním atribut což je pro mě docela useless a zatím jsem neměl potřebu s tímto pracovat. A pokud bych ten FormControl donutil pracovat s latte tak by se pak třeba ty jednotlivé šablony daly přetěžovat apod.

akadlec
Člen | 1326
+
0
-

Primárně mě jde o to vytvořit si formulářový prvek který bude nezávislý na aktuální šabloně a budu jej moct použít na vícero místech aniž bych musel vše znova dokola psát a taky měl možnost jednoduše tu šablonu změnit.

Např:

<form n:name="mujForm">
	{input customizovanyInput class => 'nejaka css trida'}
</form>

No a ten input by použil předem definovanou šablonu:

<div class="neco">
	<a href="#">Hodnota policka</a>
	<input type="text" name="customizovanyInput" value="Hodnota policka" class="js-hidden" />
</div>
akadlec
Člen | 1326
+
0
-

Hmm takže jsem ten control donutil vykreslovat pomocí LATTEčka…zatím mě to funguje jak chci, otázka je, může to něčemu vadit? Nebo je to hrubě proti nějakým pravidlům? V podstatě jsem nahradil skládání elementu pomocí Html:el() na latte.

David Matějka
Moderator | 6445
+
0
-

@akadlec jak tam treba resis cachovani sablon?

akadlec
Člen | 1326
+
0
-

No zatím nijak :(

LeonardoCA
Člen | 296
+
0
-

Ja si myslim, ze to nebude vadit nicemu, poznas :) (jedine kdyby jich bylo hodne na jedne strance, tak bys to mozna poznal na rychlosti renderovani)

Zax
Člen | 370
+
0
-

Myslím, že hledáš tohle, což by snad mělo formulářovému prvku dodat funkčnost z UI\Control, včetně šablon. Nemám vyzkoušené, jenom jsem na to nedávno někde narazil a zůstalo mi to v hlavě ;-)

EDIT: kruci, já si na tyhle „otázky“ ala stack overflow nemůžu zvyknout.. jsem to měl napsat do toho pole dolů místo toho, abych klikal na „komentovat“ :-(

Editoval Zax (9. 1. 2015 16:33)

akadlec
Člen | 1326
+
0
-

to si nejsem úplně jistý zda to řeší to co chci já. Nicméně mě už to funguje, ještě to trochu poladím, dodělám JS a zkusím ukázat ke kritice zkušenějších.

akadlec
Člen | 1326
+
0
-

Takže jsem se to pokusil dát nějak dohromady a hodit na to na github jako extension. Zatím mě to funguje tak jak chci. Bylo by fajn kdyby si našel někdo ze zdejších guru čas a koukl na to zda je to ok, či je tam nějaká prasárna ;)

No a když už sem to teda tak nějak dal dohromady tak je to i vedle v jednom form controlu

Editoval akadlec (11. 1. 2015 11:10)

akadlec
Člen | 1326
+
0
-

@matej21 hele prosímtě neporadil by jsi jak čistě pořešit tuhle část kde se denifuje temp složka pro latte?

David Matějka
Moderator | 6445
+
0
-

@akadlec tezce :)
asi bych Latte\Engine misto takhle vytvarel zhruba:

$presenter = $this->lookup('Nette\Application\UI\Presenter');
$factory = $presenter->getContext()->getByType('Nette\Bridges\ApplicationLatte\ILatteFactory');
$engine = $factory->create();

Sice to neni moc cisty, ale zadny jiny funkcni (a automaticke) reseni me nenapada…