Formulářová makra: jak přidat třidu?
- Šaman
- Člen | 2659
Ahoj, potřebuji v šabloně přidat třídu do formuláře. Nasledující kód mi však zahodí všechny původní třídy a nastaví jen tu ze šablony. Já ji chci ale přidat k těm, které si nese formulář. Víte někdo jak na to, pls?
{input dateTo} <!-- vyrenderuje <input ... class="date hasDatepicker"> -->
{input dateTo, class=>'form-control'} <!-- vyrenderuje <input ... class="form-control"> -->
<!-- chci dosáhnout: <input ... class="date hasDatepicker form-control"> -->
- Zax
- Člen | 370
Tohle jsem taky nedávno řešil a trochu blíž zkoumal chování.
Mějme formulářový prvek
$form->addText('name', 'Jméno')
->getControlPrototype()
->addClass('test');
<input n:name="name" class="form-control">
<!-- vygeneruje class="form-control" -->
<input n:name="name" n:class="form-control">
<!-- vygeneruje class="test" -->
{input name, class => form-control}
<!-- vygeneruje class="form-control" -->
První příklad vygeneruje pouze „form-control“, protože když Latte
vidí v elementu class, tak automaticky zruší cokoliv bylo nastavené
v inputu, aby ve výsledném html nebyly dva stejné atributy (ve zkompilované
šabloně je cca toto:
echo $control->addAttributes(['class' => NULL])->attributes()
).
Druhý příklad s n:class jsem podrobně nezkoumal.
Třetí příklad se správně přeloží do
echo $control->addAttributes(['class' => 'form-control'])
,
kámen úrazu je ale v tom, že metoda addAttributes používá funkci
array_merge
, nikoliv array_merge_recursive
. Těžko
říct, zda je to tak správně…
Editoval Zax (11. 3. 2015 3:35)
- Jan Tvrdík
- Nette guru | 2595
Možná bychom mohli do Nette přidat kromě class
, taky
+class
a pro konzistenci i -class
.
- David Grudl
- Nette Core | 8218
Z pohledu Latte parseru není +class
symbol, takže je třeba
parametry ve FormMacros zpracovat ručně, podobně jako to dělá třeba
macroVar. Není to nijak zásadně složitý úkol, tak to třeba někdo
implementuje.