Zanořený WebChemistry Multiplier – načtení hodnot

Vlčnovan
Člen | 4
+
0
-

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 | 652
+
+1
-

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
+
+1
-

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.