RadioList ručne v latte – nastavení ID a Labelů
- ajda2
- Člen | 66
Zdravím všechny,
snažím se ručně v šabloně vykreslit RadioList, protože mám formulář
v komponentě a tu si násobím pomocí Nette\Application\UI\Multiplier.
Problém nastal v případě, že více formulářů vykresluji na jedné
stránce. Musel sem vykreslit v šabloně inputy s labely a nastavit jim
příslušná ID podle jména komponenty(přidal jsem číslo), aby se
neovliňovaly Labely.
Problém nastal u RadioListu, kde nejsem schopen nastavit ID
u jednotlivých položek.
Prošel jsem už desítky vláken na fóru, ale nikde se to nevyřešilo, nebo
se řešilo trochu něco jiného.
https://forum.nette.org/…ist-in-latte –
zde je to blízko, ale pořád dostanu objekt HTML, kterému nemůžu nastavit
ID – alespoň nevím jak.
Potřebuji prostě jednotlivým prvkům RadioListu ručně ID v šabloně a Labelům nastavit paramter ‚for‘, protože když mám více formulářů na stránce, tak všechny mají stejné ID a kliknutí na label ovliňují jen první RadioList.
Možná je zakopaný pes úplně jinde, protože mi nepřijde košér, aby zůstavalo ID inputů stejné při použití Nette\Application\UI\Multiplier. Má se toto nastavovat v továrničce?
Předem děkuji za pomoc.
- ajda2
- Člen | 66
Zkoušel jsem tohle
<?php
{foreach $form['open']->items as $key => $value}
{var item= $form['open']->getControl($key)}
{$item}
{/foreach}
?>
Jenže tím získám do $item
celý input i s labelem, bez
možnosti jim změnit id a for.
Potřebuju něco jako
<?php
{foreach $form['open']->items as $key => $value}
{$item id => "noveID"}{label for => "noveID"}
{/foreach}
?>
A nějak potřebuju získat ten Input a label.
Přijde mi celkem jako nesmysl, že by to Nette nějak neřešil – tím
myslím celkově u komponent, že nijak nerozlišuje, že se jedná o kopii
komponenty. Takto se ovlivňují elementy mezi komponentami.
- Vojtěch Dobeš
- Gold Partner | 1316
Můžeš vyzkoušet tohle rozšíření formulářových maker. Nemám to nijak durch otestované, ale pokud pomůže, budu rád :).
- ajda2
- Člen | 66
vojtech.dobes: Moc děkuju! Funguje.
Tvé řešení jsem našel a také zkoušel, ale nefungovalo mi to(Už sem byl
asi roztržitý).
Každopádně už mi to funguje.
Bylo jen potřeba změnit metodu install
na
<?php
public static function install(Latte\Compiler $parser)
?>
Nyní mi to teda funguje v šabloně takto
<?php
{var i = 0}
{inputlist RadioButtons}
{input id => "radio-".$i."-".$control->name}
{label for => "radio-".$i."-".$control->name}<br>
{var $i++}
{/inputlist}
?>
Funkční to je, ale přijde mi to dost nečisté a nešikovné.
Nejde nějak v Nette zařídit, aby se do ID formulářových elementů
automaticky přidávalo $control->name
při použití Nette\Application\UI\Multiplier ?