sirka stlpcov pri automatickych formoch

ikoon
Člen | 70
+
0
-

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 | 762
+
0
-

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 | 70
+
0
-

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 | 762
+
0
-

V tom případě proč nevystačíš s ID formu, jakožto nadřazeného prvku té tabulky?

m.brecher
Generous Backer | 758
+
0
-

@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 | 758
+
0
-

@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)

ikoon
Člen | 70
+
0
-

Dakujem za rady, uz to mam. Spravil som to teraz cez to css. Pozriem aj na tie wrappery, uvidim co sa bude dat.
Este raz dakujem…