Manuálně vykreslený multidimenzionální dynamický formulář
- Rudolf247
- Člen | 38
Ahoj,
Zasekl jsem se při manuálním vykreslení multidimenzionálního dynamického
formuláře.
Problém je v tom, že když si formulář vykreslím přes {control}, tak vše
funguje jak má, bohužel při manuálním vykreslení trošku blbne a
nefunguje. A bohužel ho potřebuji vykreslit manuálně kvůli
složitějšímu layoutu formuláře.
Takže tady je problémová část formuláře:
$specs = $form->addDynamic('specs', function (Container $specs) use ($removeEvent){
$specs->addText('name', 'specifikace')
->setAttribute('class','form-control');
$specs->addSubmit('remove', 'Smazat')
->setAttribute('class', 'btn btn-danger btn-xs ajax')
->addRemoveOnClick(function () {
if ($this->isAjax()) {
$this->redrawControl('formArea');
}
}
);
$spec = $specs->addDynamic('spec', function (Container $spec) use ($removeEvent){
$spec->addText('atribute', 'atribut')
->setAttribute('class','form-control');
$spec->addTextArea('properties', 'podrobnosti')
->setAttribute('class','form-control');
$spec->addSubmit('remove', 'Smazat')
->setAttribute('class', 'btn btn-danger btn-xs ajax')
->addRemoveOnClick(function () {
if ($this->isAjax()) {
$this->redrawControl('formArea');
}
});
}, 1);
$spec->addSubmit('ad', 'Přidat')
->setAttribute('class', 'btn btn-primary btn-sm ajax')
->setValidationScope(FALSE)
->onClick[] = [$this, 'AddSpec'];
}, 1);
$specs->addSubmit('add', 'Přidat')
->setAttribute('class', 'btn btn-primary btn-sm ajax')
->setValidationScope(FALSE)
->onClick[] = [$this, 'AddSpecs'];
public function AddSpecs(SubmitButton $button)
{
$button->parent->createOne();
if ($this->isAjax()) {
$this->redrawControl('formArea');
}
}
public function AddSpec(SubmitButton $button)
{
$button->parent->createOne();
if ($this->isAjax()) {
$this->redrawControl('formArea');
}
}
Zde je výřez formuláře s problémovou částí
{snippet formArea}
<form n:name="addProduct" class="form-horizontal">
<div class="form-group">
<strong class="offset-2 pb-2">Specifikace</strong>
<div class="row">
{foreach $form['specs']->getContainers() as $id => $specs}
{if $id == 0}{else} <div class="col-sm-2"></div>{/if}
<label class="col-sm-2 control-label">Specifikace</label>
<div class="col-sm-8">
<input n:name="specs-$id-name" type="text" class="form-control">
</div>
<div class="col-sm-2">
{if $id == 0} {input specs-add} {else} <input n:if="$id != 0" n:name="specs-$id-remove" > {/if}
</div>
{foreach $form['specs']->getContainers() as $id_spec => $spec}
<label class="col-sm-2 control-label">Atribut</label>
<div class="col-sm-8">
<input n:name="specs-$id-spec-$id_spec-atribute" type="text" class="form-control">
</div>
<div class="col-sm-2">
{if $id == 0} <input n:name="specs-$id-spec-ad"> {else} <input n:if="$id != 0" n:name="specs-$id-spec-$id_spec-remove" > {/if}
</div>
<label class="col-sm-2 control-label">Podrobnosti</label>
<div class="col-sm-8">
<textarea n:name="specs-$id-spec-$id_spec-properties" class="form-control"></textarea>
</div>
{/foreach}
{/foreach}
</div>
</div>
</form>
{/snippet}
Problém je v tom že když kliknu na button „<input n:name="specs-$id-spec-ad“>„, tak se nic nestane. A když kliknu na první button "<input n:name="specs-$id-name“ type=„text“ class=„form-control“>", tak se nejdřív přidají pole z kontejneru $spec a potom kontejner $specs, ale k tomu ještě 2× kontejner $spec.
Při automatickém vykreslení je vše v pořádku. Kontroloval jsem i vykreslené názvy buttonu a jsou stejné v obou případech vykreslení, proto nevím v čem by už mohl být problém.
Děkuji za každou pomoc.