Zanořený WebChemistry Multiplier – načtení hodnot
- Vlčnovan
- Člen | 4
Zdravím, prosím o radu. Mám formulář jako komponentu ve které mám multiplier a v něm multiplier. Clonování a odstraňování inputů v obou funguje v pořádku. V primárním multiplieru načtu hodnoty pomocí
$multiplier->setValues($this->multiServiceTypeValues);
V zanořeném multiplieru mi ale asi jen
$multiplier->setValues($this->multiPriceSettingValues);
fungovat nebude, protože v této variantě mi všechny klony vnořeného multiplieru obsahují stené data. Prosím o radu, jak načíst do vnořeného klonu multiplieru vždy jiná data. (pro každý input vnořeného multiplieru). Nějak pomocí předávaného id?
ContractForm.php – data
public $multiServiceTypeValues = [
1 => [
'serviceType' => 1
],
2 => [
'serviceType' => 2
]
];
# Data pro vnořený multiplier - varianta 1 - data zobrazena pro všechny clony stejně
public $multiPriceSettingValues = [
1 => [
'priceSetting' => 2
],
2 => [
'priceSetting' => 1
]
];
# Data pro vnořený multiplier - varianta 2 - data se nanačtou
public $multiPriceSettingValues = [
1 => [
1 => [
'priceSetting' => 1
]
],
2 => [
1 => [
'priceSetting' => 2
]
]
];
ContractForm.php – componenta
$form = new Form();
$copies = 1;
$maxCopies = 10;
$multiplier = $form->addMultiplier('multiServiceType', function (Nette\Forms\Container $container, Form $form) {
$container->addSelect('serviceType', 'Servisní typ:', ['Jeden', 'Dva', 'Tri']);
$copies = 1;
$maxCopies = 10;
$multiplier = $container->addMultiplier('multiPriceSetting', function (Nette\Forms\Container $container, Form $form) {
$container->addSelect('priceSetting', 'Nastavení ceny:', ['Acko', 'Becko', 'Cecko']);
}, $copies, $maxCopies);
$multiplier->setValues($this->multiPriceSettingValues);
}, $copies, $maxCopies);
$multiplier->setValues($this->multiServiceTypeValues);
šablona default.latte
<div n:multiplier="multiServiceType">
<div class="form-group row">
<div class="col-sm-2 col-form-label">{label serviceType /}<span class="redStar"> *</span></div>
<div class="col-sm-9">{input serviceType }</div>
</div>
<div n:multiplier="multiPriceSetting">
<div class="form-group row">
<div class="col-sm-2 col-form-label">{label priceSetting /}<span class="redStar"> *</span></div>
<div class="col-sm-9">{input priceSetting }</div>
</div>
</div>
</div>
Moc děkuji za každý nápad / radu / nasměrování. :)
- Martk
- Člen | 661
Možná bude stačit toto:
$values = [
'multiServiceType' => [
[
'serviceType' => 'foo',
'multiPriceSetting' => [
[
'priceSetting' => 'foo'
]
]
]
]
];
anebo
$firstMultiplier->onCreateEvent[] = function (Nette\Forms\Container $container) {
$container['multiPriceSetting']->setValues(
[
['priceSetting' => 'foo'],
]
);
};
Píšu z hlavy, tak možná bude někde chyba
Editoval Martk (17. 2. 2019 14:39)
- Vlčnovan
- Člen | 4
Super, moc díky za pomoc!
Ještě tu dám vyřešení problému výše. Chybou bylo to, že jsem se snažil natáhnout data pro vnořený multiplier zvlášť. Jak psal Martk výše, stačilo mít data pro rodičovský multiplier. A tedy konečným řešením bylo odstranění řádku:
$multiplier->setValues($this->multiPriceSettingValues);
a úprava dat(pole) pro rodičovsnký multiplier:
public $serviceTypeMultiValues = [
1 => [
'serviceType' => 2,
'priceSettingMulti' => [
0 => [
'valuePriceSetting' => 1
]
]
],
2 => [
'serviceType' => 3,
'priceSettingMulti' => [
0 => [
'valuePriceSetting' => 2
]
]
]
];
Ještě jednou díky.