Nette\Forms: prace s groups
- AceUnihoc
- Člen | 19
Dnes jsem zkousel „FormGroup“ a narazil jsem na tyto problemy:
- Pokud pridavam skupinu v prubehu pridavani inputu a chci ji definovat tak, ze za ni uz dalsi skupina nebude nebo bude obsazena v nadrazene skupine.
<?php
$form->addText('name', 'Your name:');
$form->addText('age', 'Your age:');
$form->addGroup('Podskupina')->add($form['name'], $form['age']);
// tady bych potreboval aby skupina skoncila, neco jako ->close();
$form->addText('score', 'Your score:');
?>
- Moznost pridat do skupiny rovnou cely container
<?php
$form->addGroup('Skupina')->add($container);
?>
- V pripade ze klonuju pole formulare napr.:
<?php
$form->addGroup('Skupina');
$form->addText('name', 'Your name:');
$form['name2'] = clone $form['name'];
?>
potom ‚name2‘ nepatri do zadne skupiny. Nevim jestli je to umysl, ale v tomto pripade neni problem prvek do skupiny pridat.
Vim ze by to slo resit vlastni renderovaci rutinou, ale myslim ze tohle by nebylo na skodu v zakladnim renderu.
- David Grudl
- Nette Core | 8218
ad 1) jak píše LM, můžeš aktuální skupinu vypnout přes
$form->setCurrentGroup(NULL)
, ale souhlasím, že to má
WTF-faktor jak prase. Budu rád, pokud přijdete s lepším způsobem. Možná
by pomohlo přejmenovat addGroup()
na něco jiného, nebo její
funkčnost rozdělit mezi addGroup()
a
setCurrentGroup
.
ad 2) skupina může združovat pouze formulářové prvky, ale něco jako
$form->addGroup('Skupina')->add($container->getControls())
zprovozním.
ad 3) to se mi nezdá, name2
by mělo patřit do právě
aktivní skupiny.
- AceUnihoc
- Člen | 19
David Grudl napsal(a):
ad 1) jak píše LM, můžeš aktuální skupinu vypnout přes
$form->setCurrentGroup(NULL)
, ale souhlasím, že to má WTF-faktor jak prase. Budu rád, pokud přijdete s lepším způsobem. Možná by pomohlo přejmenovataddGroup()
na něco jiného, nebo její funkčnost rozdělit meziaddGroup()
asetCurrentGroup
.ad 2) skupina může združovat pouze formulářové prvky, ale něco jako
$form->addGroup('Skupina')->add($container->getControls())
zprovozním.ad 3) to se mi nezdá,
name2
by mělo patřit do právě aktivní skupiny.
ad 1) souhlas to je reseni ale ne moc idealni. Napadlo me pridat nepoviny parametr do addGroup($name, $setCurrent = TRUE); v pripade $setCurrent = FALSE by se nanastavila current group a skupina by se pouze vytvorila.
ad 2) chapu, neco takovy sem myslel aby fungovalo
ad 3) mas pravdu v tomhle pripade to funguje, nefunguje to v pripade ze se clonuje container napr.:
<?php
$group = $form->addGroup('Skupina');
//$form->setCurrentGroup();
$head = $form->addContainer('sub');
$head->setCurrentGroup($group);
$head->addText('names', 'Your name:');
$form['sub2'] = clone $head;
?>
Prvni container je ve skupine a clonovany container neni v zadne.
- Jde nastavit aby patrila skupina do jine skupiny. Myslim jinym zpusobem nez embedNext. Napriklad kdyz budu chtit pridat do jedne skupiny vice podskupin. Neco jako setParent();
Editoval AceUnihoc (11. 9. 2008 16:17)
- David Grudl
- Nette Core | 8218
Ono otázkou je, co by se mělo od skupin očekávat.
Komponenty, které
vlastní Nette\ComponentContainer
a lze je získat například přes getComponents()
, tvoří
logickou strukturu. (Něco jako vlastnost
Components
v ASP.NET nebo Delphi.) Na rozdíl od struktury
vizuální, kterou Nette přímo nespravuje (v ASP.NET nebo Delphi
dostupná přes vlastnost Controls
). Takže například
logický FormContainer člení strukturu dat, která získáme
z formuláře, do polí. Neříká však nic o vizuální struktuře, kde
který formulářový prvek umístit je čistě věcí vykreslování.
A skupiny jsou nástrojem, který by měl pomoci právě při
vykreslování.
Neříkám, že jen při vykreslování, oni mohou mít i svou logickou funkci, proto přemýšlím, co by se vlastně mělo od nich očekávat, na co všechno by se mohly hodit.
Pokud zůstane u vykreslování, připadá mi zbytečné, aby skupina mohla
obsahovat logický prostředek jakým je FormContainer
nebo jinou skupinu. Jde spíš o to, aby se do ní daly snadno nasypat prvky
containeru (bude v další revizi), nebo aby se dalo ovládat vykreslování
(např. embedNext).
- AceUnihoc
- Člen | 19
Souhlasim s tim co si napsal ze container tvori logickou strukturu a group vizualni. Vim, ze skupiny jsou teprve na zacatku a pokud pujde $form->addGroup(‚Skupina‘)->add($container->getControls()) tak neni duvod nastavovat skupinu containeru.
- Jeste jsem nasel jednu chybku v FormContainer.php na radku 48: public function setCurrentGroup(FromGroup $group = NULL) … FormGroup misto FromGroup