manuální vykreslení složitějšího formuláře – containers
- ji_ri_k
- Člen | 44
Zdravím,
chtěl bych Vás poprosit o radu, jakým způsobem se dá manuálně vykresit v šablonách container vytvořený tímto způsobem. (Verze Nette 2.0, ale i ve verzi 0.9.)
...
$form->addContainer('items');
$items = $this->model->getAllItems();
foreach($items as $item) {
$form->addText($item->id, $item->name, 10, 10);
}
...
Potřeboval bych se dostat v šabloně např přes nějaký foreach cyklus k jednotlivým textovým polím toho containeru. Něco jako:
<p n:foreach="$form['items'] as $item">{$item->label}: {$item->control}</p>
Editoval kravčo (6. 10. 2010 18:23)
- ji_ri_k
- Člen | 44
Děkuji za rychlou odpověď. Bohužel tento způsob jsem zkoušel, ale nefunguje.
Když si vydumpuji tuto proměnnou:
{$form['items']->controls}
tak v ní je pouze tato hodnota:
NInstanceFilterIterator(1) {
"type" private => "IFormControl" (12)
}
Tzn. žádná iterace se nekoná.
Pro jistotu zde přidám více kódu (zjednodušeného), který mi nefunguje.
protected function createComponentItemForm($name) {
$form = new NAppForm;
$items = array('lorem', 'ipsum', 'dolor');
$form->addContainer('items');
foreach($items as $k => $val) {
$form->addText($k, $val, 5);
}
return $form;
}
Pak zkouším manuální vykreslení, které ale nefunguje (nejsem schopen se
dostat k tomu poli uvnitř containeru). (formulář je předán do šablony
pomocí $this->template->itemForm = $this['itemForm'];
<p n:foreach="$itemForm['items']->controls as $item">{$item->label}: {$item->control}</p>
Vše výše uvedené testuji v Nette 2
Editoval kravčo (6. 10. 2010 18:24)
- kravčo
- Člen | 721
Možno tie textové políčka chceš umiestniť do toho kontajneru items:
protected function createComponentItemForm($name) {
$form = new NAppForm;
$items = array('lorem', 'ipsum', 'dolor');
$container = $form->addContainer('items');
foreach($items as $k => $val) {
$container->addText($k, $val, 5);
// alternatívne: $form['items']->addText($k, $val, 5);
}
return $form;
}
- ji_ri_k
- Člen | 44
Jéé děkuji ti kravčo… taková hloupost :-)
Trochu jsem očekával, že se to chová podobně jako u groups, kde prvky
stačí definovat pod ->addGroup() a automaticky se do té skupiny přidají
(dokud nepřidám další skupinu).
Protože pokud jsem formulář nechal vykreslit rovnou přes makro
{control itemForm}
a zkontroloval odeslané hodnoty, tak byly
správně v asociativním poli $items.
Takže už je to vyřešené… moc děkuji za spolupráci, taková hloupost a takové energie :-)
//edit: a díky i 22 – to je pro Nette 2 :-)
Editoval ji_ri_k (6. 10. 2010 19:10)