adddynamic a přidání prvku chyba v submited
- zoool
- Člen | 89
Ahoj snažím se použít komponentu Replikátor formulářových
kontejnerů
ale narazil jsem na jeden problém
formulář jde vytvorit jednoduše mám jej takto
$replicator = $form->addDynamic('obrazky', function (Container $skupina) use ($presenter) {
$skupina->addText('nazev', 'Název souboru:');
$skupina->addUpload('soubor', 'Soubor:');
},1);
když to nechám takto dám do šablony takto
<table n:foreach="$form['obrazky']->components as $obrazek">
<tr>
<td>{$obrazek['nazev']->label}</td>
<td>{$obrazek['nazev']->control}</td>
</tr>
<tr>
<td>{$obrazek['soubor']->label}</td>
<td>{$obrazek['soubor']->control}</td>
</tr>
</table>
ale když pak přidám do presenteru toto
$replicator->addSubmit('add', 'Přidat dalšího člověka')
->setValidationScope(FALSE)
->onClick[] = callback($this, 'MyFormAddElementClicked');
tek už se nevykreslí ale vypíše to chybu
Cannot use object of type Nette\Forms\Controls\SubmitButton as
array
Děkuji
- Filip Procházka
- Moderator | 4668
V první řadě, to nejdůležitější jsi vůbec neposlal. Událost, ve které chyba nastává.
A pak, Replicator se krajně nehodí na nahrávání souborů.
- zoool
- Člen | 89
1. promin chyba nastává zde
112: <?php $iterations = 0; foreach ($iterator = $_l->its[] = new Nette\Iterators\CachingIterator($form['obrazky']->components) as $obrazek): ?>
113: <table>
114: <tr>
115: <td><?php echo Nette\Templating\DefaultHelpers::escapeHtml($obrazek['nazev']->label, ENT_NOQUOTES) ?></td>
116: <td><?php echo Nette\Templating\DefaultHelpers::escapeHtml($obrazek['nazev']->control, ENT_NOQUOTES) ?></td>
117: </tr>
118: <tr>
119: <td><?php echo Nette\Templating\DefaultHelpers::escapeHtml($obrazek['soubor']->label, ENT_NOQUOTES) ?></td>
z ladenky na řádku 115
2.Co se hodí na nahrávání souborů když nevím kolik jich bude?
Editoval zoool (16. 1. 2012 19:21)
- Filip Procházka
- Moderator | 4668
Takto opravíš tu svoji chybu.
<table n:foreach="$form['obrazky']->containers as $obrazek">
Nějakou komponentu, která je určená na nahrávání více souborů najednou? Třeba nějaký multiple file uploader.
- zoool
- Člen | 89
Supr děkuji ted už to jde vykreslit. Já jsem se díval na ten multi upload, ale právě, že vetšina funguje přes ajax, a to se mi moc nehodí, bo název souboru ukládám a přiřazuji ke zboží, a já zatím nevím id zboží, tak chci uploadovat až po uložení a vygenerovaní patřičného ID produktu
Ještě mám poslední otázku když dám callback při kliknutí na funkci MyFormAddElementClicked a funkce vypadá takto
public function MyFormAddElementClicked(Nette\Forms\Controls\SubmitButton $button)
{
$obr = $button->parent;
$button->parent->createOne();
if ($obr->isAllFilled()) {
$button->parent->createOne();
}
}
Tak jak to že se mi formulář klasicky odešla jako pustí se i funkce na odeslání ProduktyFormSubmitted
Editoval zoool (16. 1. 2012 20:17)
- Filip Procházka
- Moderator | 4668
To je jednoduché, onClick
je „navíc“, hlavní událost
formuláře je onSuccess
.
Lepší je to nekombinovat a používat i na „hlavní“ tlačítko
onClick
, pak v tom nebudeš mít zmatek :)