Hromadný submit formulářů
- olkins
- Člen | 30
Dobrý den, potřebovala bych radu ohledně submitu pole inputů jedním
tlačítkem.
Potřebuji vypsat fotky a ke každé z nich vlastní formulář pro editaci, ve
kterém bude třeba název a popis. Jedním tlačítkem submit pak chci odeslat
všechny změny. V html to jde udělat pomocí tagu input name=„title[]“,
jak to udělat v nette mě nenapadá.
- Filip Procházka
- Moderator | 4668
Nette k tomuto má Containery. Pokud si to chceš usnadnit, tak Replicator.
Editoval HosipLan (7. 4. 2012 14:32)
- olkins
- Člen | 30
Containery jsem zkoušela, ale nemůžu přijít na jejich vykreslování. Pole fotek získám z databáze a pak ho foreachem vypisuju do šablony. A nevím jak do toho foreache přidám vykreslování formuláře, aby pro každou fotku byl právě jeden a jak pak do hidden pole formuláře přidám id fotky.
- Filip Procházka
- Moderator | 4668
Zkus příště posílat, co už máš hotové, ať se máme od čeho odpíchnout. Takže uděláme si základní kostru formuláře
use Nette\Application\UI;
protected function createComponentPhotosForm()
{
$gallery = $this->database->table('gallery')->...;
$form = new UI\Form;
$photos = $form->addContainer('photos');
foreach ($gallery as $image) {
$photo = $photos->addContainer($image->id);
$photo->addText('title', $image->title)
->setOption('path', $image->path);
$photo->addHidden('id')
->setDefaultValue($image->id);
}
return $form;
}
Tu si můžeš zkusit vykreslit
{control photosForm}
a potom si můžeš hrát s detaily
{form photosForm}
<div n:foreach="$form['photos']->components as $photo" class="photo">
{* jméno containeru je vždy "photos-1" kde jednička je ID fotky *}
{formContainer "photos-$photo->name"}
{input title}
<img src="{$basePath}/{$photo['title']->getOption('path')}" alt="" />
{/formContainer}
</div>
{/form} {* hiddeny se vykreslí automaticky na konci *}
- duke
- Člen | 650
Tak si stáhní alespoň stable verzi 2.0.x (např. zde) nebo pokud chceš nejnovější opravy tak vývojovou verzi nejlpíp přímo z githubu.
- duke
- Člen | 650
Nejpravděpodobnější vysvětlení je, že jsi to uploadnula jinam, než jsi měla, a že ti to pořád jede na staré verzi.
Jde o to, že to makro se instaluje v této
metodě společně s makry {form}
, {label}
a
{input}
. Pokud ti to nehlásí tutéž chybu také u nich,
znamená to, že se spouští starší verze této metody ze staršího Nette,
kde {formContainer}
ještě definováno není.
- duke
- Člen | 650
@HospiLan Jestli myslíš Nettí cache, tak netuším, jak by to mohlo pomoci. Vždyť když dojde k chybě při překladu latte souboru, tak se do cache nic neukládá (tam se ukládá až výsledek bezchybného překladu). Ale dokážu si představit, že by to mohla dělat nějaká jiná cache na jiné úrovni.
Edit: Nicméně souhlasím, že promazat cache je rozumné už z principu při každém upgradu Nette.
Editoval duke (7. 4. 2012 17:41)
- Filip Procházka
- Moderator | 4668
Containery fungují stejně dobře v Novém nette jako i starém. Problém máš ve vykreslování, takže ho upravíme, aby to fungovalo i ve starším Nette
{form photosForm}
<div n:foreach="$form['photos']->components as $photo" class="photo">
{input "photos-$photo->name-title"}
<img src="{$basePath}/{$photo['title']->getOption('path')}" alt="" />
</div>
{/form} {* hiddeny se vykreslí automaticky na konci *}