sirka stlpcov pri automatickych formoch
- ikoon
- Člen | 80
Zdravim
Mam automaticke vykreslovanie formov, dava mi to do tabulky. S tym nemam problem. Chcel by som ale zmenit napr sirku stlpcov. Teraz ich to nenastavuje nijak. Ako to spravit? Nechcem si vyrabat vlastny form renderer ak to nebude nutne.
Vdaka…
Editoval ikoon (21. 6. 2023 19:42)
- Kamil Valenta
- Člen | 820
Classu můžeš přidat pomocí ->setAttribute().
ID sice nastavit také můžeš, ale zde se nejprve nabízí otázka
„proč?“. Proč nevyužiješ ID, které již prvek / label má.
- ikoon
- Člen | 80
ake id? potrebujem nastavit sirku stlpca tabulky, to id nema, ani class. Je to ciste <tr><th> alebo <td>.
Kamil Valenta napsal(a):
Classu můžeš přidat pomocí ->setAttribute().
ID sice nastavit také můžeš, ale zde se nejprve nabízí otázka „proč?“. Proč nevyužiješ ID, které již prvek / label má.
- Kamil Valenta
- Člen | 820
V tom případě proč nevystačíš s ID formu, jakožto nadřazeného prvku té tabulky?
- m.brecher
- Generous Backer | 871
@ikoon
Nechcem si vyrabat vlastny form renderer ak to nebude nutne.
potrebujem nastavit sirku stlpca tabulky, to id nema, ani class. Je to ciste <tr><th> alebo <td>
Defaultní renderer Nette formulářů poskytuje určité omezené možnosti si nastavit jaké tagy chceš v šabloně použít popř. přidat nějaké classy. V dokumentaci to myslím ani není, je to k nalezení po různých kódech na fóru, gitHubu apod.
Celý fígl je v tom, že defaultní renderer má pole wrappers, kde jsou předdefinované různé nastavení jak se formulář rendruje, je to intuitivní a dá se snadno odhadnout jak omezené modifikace udělat.
Vydumpuj si defaultní nastavení wrappers rendereru a prohlédni si to:
$form = new Form;
//......
$renderer = $form->getRenderer();
bdump($renderer->wrappers);
return $form;
Potom můžeš začít experimentovat s úpravami, třeba takhle:
$form = new Form;
//......
$form->onRender[] = function(Form $form){
$renderer = $form->getRenderer();
$renderer->wrappers['form']['container'] = 'div.form-container'; // zabalím form do divu a přidám classu
$renderer->wrappers['control']['container'] = 'td.controll-cell'; // přidám class do td inputu
$renderer->wrappers['label']['container'] = 'th.label-cell'; // přidám class do td labelu
};
return $form;
Já jsem to takto používal dříve, ale lepší je si pro formuláře udělat vlastní obecnou latte šablonu, což je ale hodně práce a vyžaduje zkušenosti. Wrappers jsou cesta jak si udělat pěkný formulář rychle a snadno.
Editoval m.brecher (21. 6. 2023 20:58)
- m.brecher
- Generous Backer | 871
@ikoon
Chcel by som ale zmenit napr sirku stlpcov. Teraz ich to nenastavuje nijak. Ako to spravit?
Šířku sloupců můžeš nastavit aniž by Jsi přidával do tagů th, td nějaké classy, stačí si tag <form> označit nějakou classou, v latte to jde snadno takto:
{form 'myForm', class: 'my-form-class'}
No a v css už nastavuješ šířky:
.my-form-class th { width: 200px;} /* šířka sloupce pro labels */
.my-form-class td { width: 450px;} /* šířka sloupce pro inputs */
renderer totiž sloupec pro labels vytváří jako th a pro inputs jako td, takže jsou navzájem odlišené.
Editoval m.brecher (21. 6. 2023 20:46)