Problém s foreach v šabloně při vykreslení form
- jAkErCZ
- Člen | 322
Zdravím,
používám ve formu multiplier pro jednodušší vytváření dalšího prvku
ve formu ale mám problém že po vytvoření dalšího prvku se mi zduplikuje
jak ten původní tak zároveň vytvoří nové a to celé 2×.
Pro lepší vysvětlení přikládám SCREEN
Presenter:
$form = new Form;
$copies = 1;
$maxCopies = 10;
$multiplier = $form->addMultiplier('multiplier', function (\Nette\Forms\Container $container, \Nette\Forms\Form $form) {
$container->addRadioList('atribut', '', ([
'window' => \Nette\Utils\Html::el()->setHtml('Okno <img src="http://localhost/ryzi-okna/images/contact/window.png"
class="img_products">'),
'door' => \Nette\Utils\Html::el()->setHtml('Dveře <img src="http://localhost/ryzi-okna/images/contact/door.png"
class="img_products">'),
'balcony' => \Nette\Utils\Html::el()->setHtml('Balkón <img src="http://localhost/ryzi-okna/images/contact/balcony.png"
class="img_products" >'),
'gate' => \Nette\Utils\Html::el()->setHtml('Vrata <img src="http://localhost/ryzi-okna/images/contact/gate.png"
class="img_products" >'),
]))->setRequired();
$container->addText('width', '')->setRequired();
$container->addText('height', '')->setRequired();
$container->addText('pieces', '')->setRequired();
}, $copies, $maxCopies);
$multiplier->addCreateButton('Další produkt'); // add one container
Šablona:
<div n:multiplier="multiplier" class="col-lg-12">
<div class="panel-group mb-lg" id="accordion" data-toggle="collapse" style="width: 104%;">
<div n:foreach="$form['multiplier']->getContainers() as $container" class="panel panel-default">
<div class="panel-heading">
<h6 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapse{$container->name}">
Produkt {$container->name} {dump $container}
<i class="fa fa-angle-down pull-xs-right"></i>
</a>
</h6>
</div>
<div id="collapse{$container->name}" class="panel-collapse collapse in">
<div class="panel-body">
<label class="label-input100" for="atribut">Vyberte
si produkt
*</label>
{foreach $container['atribut']->items as $key => $label}
{label atribut:$key}
{input atribut:$key}
{/foreach}
<label class="label-input100" for="width">Parametry
*</label>
<div class="wrap-input100 rs1-wrap-input100 validate-input"
data-validate="Vložte šířku">
<input n:name="width" id="width" class="input100" type="number"
placeholder="Šířka (1000mm)">
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 rs2-wrap-input100 input-reset validate-input"
data-validate="Vložte výšku" style=" float: right;margin: -57px 0;">
<input n:name="height" id="height" class="input100" type="number"
placeholder="Výška (1000mm)">
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 rs3-wrap-input100 validate-input"
data-validate="Vložte počet kusů">
<input n:name="pieces" id="pieces" class="input100" type="number"
placeholder="Počet kusů">
<span class="focus-input100"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-contact100-form-btn">
{btnCreate multiplier class => contact100-form-btn}
</div>
CO sem udělal blbě že to nedělá vše pouze 1 tak jak má..
Díky
- Ondřej Kubíček
- Člen | 494
co čekáš když máš v šabloně n:multiplier
, což je makro
které vytvoří foreach a iteruje nad všemi kontejnery a pak uvnitř toho to
ještě jednou iteruješ sám
<div n:multiplier="multiplier">
...
<div n:foreach="$form['multiplier']->getContainers() as $container" class="panel panel-default">
- jAkErCZ
- Člen | 322
Ondřej Kubíček napsal(a):
co čekáš když máš v šabloně
n:multiplier
, což je makro které vytvoří foreach a iteruje nad všemi kontejnery a pak uvnitř toho to ještě jednou iteruješ sám<div n:multiplier="multiplier"> ... <div n:foreach="$form['multiplier']->getContainers() as $container" class="panel panel-default">
A mohu to co mám $form[‚multiplier‘]->getContainers() as $container nějak dostat do n:multiplier=„multiplier“ ??
- David Matějka
- Moderator | 6445
kdyz se kouknes do kodu,
tak to makro jen vytvari foreach (v podstate stejny, jako ty pises rucne) a
v nem vytvari promenne $_multiplier
a $formContainer
.
takze bud
- nepouzivej n:multiplier, ale jen svuj foreach
- nebo pouzij n:multiplier a namisto
$container
pouzijes ty promenne, ktere vytvari
- jAkErCZ
- Člen | 322
David Matějka napsal(a):
kdyz se kouknes do kodu, tak to makro jen vytvari foreach (v podstate stejny, jako ty pises rucne) a v nem vytvari promenne
$_multiplier
a$formContainer
. takze bud
- nepouzivej n:multiplier, ale jen svuj foreach
- nebo pouzij n:multiplier a namisto
$container
pouzijes ty promenne, ktere vytvari
Mám jen takový dotaz když zkusil sem použít tedy místo n:multiplier ten můj foreach ale laděnka mi háže
Component with name ‚atribut‘ does not exist.
{foreach $container['atribut']->items as $key => $label}
{label atribut:$key}
{input atribut:$key}{$label} <img src="http://localhost/ryzi-okna/images/contact/{$key}.png"
class="img_products">
{/label}
{/foreach}
ale přitom když hodím {dump $container}
Nette\Forms\Container #74f6
onValidate => null
currentGroup protected => null
validated private => null
components private => array (4)
atribut => Nette\Forms\Controls\RadioList #403e
generateId => false
separator protected => Nette\Utils\Html #895d { ... }
container protected => Nette\Utils\Html #efe2 { ... }
itemLabel protected => Nette\Utils\Html #2f4a { ... }
checkAllowedValues => true
items private => array (4) [ ... ]
caption => ""
value protected => null
control protected => Nette\Utils\Html #32e9 { ... }
label protected => Nette\Utils\Html #16d9 { ... }
disabled protected => false
errors private => array ()
omitted private => null
rules private => Nette\Forms\Rules #fd73 { ... }
translator private => true
options private => array (2) [ ... ]
parent private => Nette\Forms\Container #74f6 { RECURSION }
name private => "atribut" (7)
monitors private => array (1) [ ... ]
width => Nette\Forms\Controls\TextInput #17de
height => Nette\Forms\Controls\TextInput #933b
pieces => Nette\Forms\Controls\TextInput #fcb4
cloning private => null
parent private => WebChemistry\Forms\Controls\Multiplier #cffb
name private => "0"
monitors private => array ()
Proč mi to dělá?
- David Matějka
- Moderator | 6445
- mohl bys pouzit formContainer makro, ktere zmeni kontext, ze ktereho se budou cist inputs
{formContainer $container}
{input ....}
{/formContainer}
- pokud bys pouzil to
n:multipler
, tak tuhle zmenu kontextu by asi melo udelat samo
- jAkErCZ
- Člen | 322
David Matějka napsal(a):
- mohl bys pouzit formContainer makro, ktere zmeni kontext, ze ktereho se budou cist inputs
{formContainer $container} {input ....} {/formContainer}
- pokud bys pouzil to
n:multipler
, tak tuhle zmenu kontextu by asi melo udelat samo
Super opravdu {formContainer $container} to vyřešil :) díky