Na Checkbox ani RadioList nelze nastavit atributy při manuálním vykreslování
- Myiyk
- Člen | 321
Ahoj, narazil jsem na problém při manuálním vykreslování formuláře.
Mám formulář
$form = new Nette\Application\UI\Form;
$form->addText('text', 'text')
->setAttribute('class', "automat");
$form->addPassword('password', 'password')
->setAttribute('class', "automat");
$form->addTextArea('textarea', 'textarea')
->setAttribute('class', "automat");
$form->addCheckbox('checkbox', 'checkbox')
->setAttribute('class', "automat");
$form->addRadioList('radiolist', "radiolist", array(1, 2, 3))
->setAttribute('class', "automat");
$form->addSelect('select', "select", array(7, 8, 9))
->setAttribute('class', "automat");
$form->addMultiSelect('multiselect', "multiselect", array(10, 11, 12))
->setAttribute('class', "automat");
$form->addUpload('upload', "upload")
->setAttribute('class', "automat");
$form->addImage('image', 'http://www.seznam.cz/st/img/2011/logo.png?3.33.63')
->setAttribute('class', "automat");
$form->addButton('button', "button")
->setAttribute('class', "automat");
$form->addSubmit('submit', 'submit')
->setAttribute('class', "automat");
A vykreslím jej pomocí kódu
{form formular}
<table>
<tr n:foreach="$form->controls as $input">
<th>{label $input /}</th>
<td>{input $input, class=>"manual"}</td>
</tr>
</table>
{/form}
Tím by se teoreticky měly vykreslit všechny komponenty s třídou manual, ale to se nestane.
V případě Checkbox a RadioList nelze v šabloně s vykreslením přes makro input přepsat atributy.
Nezkoušel jsem vypisovat pomocí n:name, pravděpodobně by to mělo jít. Také jsem neteslovat CheckboxList a nevím jestli to u něj funguje.
Příčinou nemožnosti změnit atributy je způsob zápisu kódu do třídy Nette\Utils\Html pomocí metody setHtml(). Tím se nenastaví proměnná name a při volání metody startTag()(součást metody render) se nepřepíšou atributy. A kód zůstane nepozměněn.
V dokumentaci se o této vyjímce nepíše, proto to považuji za chybu.
Nette 2.1.2
- sKopheK
- Člen | 207
Od Nette 2.1 se Checkboxy a RadioListy přes macro {input ...}
vykreslují jinak,
zkus je vykreslit přes {input nazev:}
, nebo si napiš vlastní
macro, které nahradí to existující, ovšem při další změně v budoucí
verzi Nette ho možná budeš muset ručně měnit.
Jinak bych ti doporučil než každému prvku zvlášť dát css třídu raději celému formuláři a místo např.
.automat
{
border: 1px solid #000;
}
měl např.
form.automat input,
form.automat textarea
{
border: 1px solid #000;
}
Editoval sKopheK (7. 4. 2014 16:27)