Replicator – dynamické podpoložky – košík
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- FJP
- Člen | 124
Ahoj,
trošku bojuju s replicatorem. Mám dynamický počet akcí a ke každé
dynamický počet účastníků.
- nevím, jak ke každé akci protlačit počet účastníku (teď tam je 1), chtěl bych to vytáhnout ze session, ALE nevím jak to spojit s foreach (nebo jak jinak každé akci přidělit daný počet účastníku – nebo to zprasit nějak v šabloně? – to se mi ale moc nelíbí)
protected function createComponentAttendeeForm() {
$tree = $this;
$products = $this->userCart;
$form = new Form;
$form->addDynamic('products', function (Container $product) {
$removeEvent = callback($this, 'attendeeFormRemoveElementClicked');
$attendees = $product->addDynamic('attendees', function (Container $attendee) use ($removeEvent) {
$attendee->addText('first_name', 'Jméno')->setAttribute('placeholder', 'Jméno');
$attendee->addText('last_name', 'Příjmení')->setAttribute('placeholder', 'Příjmení');
$attendee->addText('company_position', 'Pozice ve firmě')->setAttribute('placeholder', 'Pozice ve firmě');
$attendee->addText('email', 'Email')->setAttribute('placeholder', 'Email')->setRequired('Jaký je email tohoto účastníka?');
$attendee->addText('phone', 'Telefon')->setAttribute('placeholder', 'Telefon');
$guide = array(
'e' => 'Elektronická',
't' => 'Tištěná',
);
$attendee->addRadioList('guide', 'Příručka ke kurzu:', $guide)->setRequired('Tato položka je povinná.');
$attendee->addSubmit('remove', '[x]')
->setValidationScope(FALSE)
->onClick[] = $removeEvent;
}, 1);
$attendees->addSubmit('add', 'Přidat dalšího účastníka')
->setValidationScope(FALSE)
->onClick[] = callback($this, 'attendeeFormAddElementClicked');
}, count($products));
$form->addSubmit('submit', 'Další');
//$form->onSuccess[] = array($this, 'productsFormSubmitted');
return $form;
}
- nevím, jak to manuálně vykreslit – problém obdobný – akce vykreslím, ale na účastníky nevím, kudy kam
{form attendeeForm}
{foreach $form['products']->containers as $id => $product}
{if isset($items[$id])}
<div>
{$presenter->findTerm($items[$id]->id)->product->code} - {$items[$id]->product} <br>
{$presenter->findTerm($items[$id]->id)->location->title}
{var $totalPricePerProduct = 0}
{foreach -----co dát sem???----- as $key => $attendee}
{input products-$id-attendees-$key-first_name}
{input products-$id-attendees-$key-last_name}
{input products-$id-attendees-$key-company_position}
{input products-$id-attendees-$key-email}
{input products-$id-attendees-$key-phone}
{input products-$id-attendees-$key-remove}
<strong>{$items[$id]->price|number} Kč (bez DPH)</strong>
{var $totalPricePerProduct += $items[$id]->price}
{/foreach}
{input products-$id-attendees-add} <strong>{$totalPricePerProduct|number} Kč (bez DPH)</strong>
</div>
{/if}
{/foreach}
<a n:href="ShoppingCart:, localization => $localization">Předchozí krok: Produkty</a><br>
{input submit}
{/form}
- když použiju následující kód dle dokumentace ⇒ error Undefined variable: attendees … bez ifíčka to jede v pohodě
public function attendeeFormAddElementClicked(SubmitButton $button) {
$button->parent->createOne();
if ($attendees->isAllFilled()) {
$button->parent->createOne();
}
}
Díky za nakopnutí.
Editoval FJP (23. 4. 2015 13:47)
- FJP
- Člen | 124
Povedlo se mi propsat tohle v akci presenteru, ale problém je, že v šabloně se to neprojeví. Neví někdo proč?
$form = $this['attendeesForm'];
if (!$form->isSubmitted()) {
$products = $this->userCart;
foreach ($products as $key => $product) {
$counter = array();
$form['products'][$key]->components['attendees']->createDefault = $product->count;
}
}
Ještě jedna věc, když odkomentuju:
$form->onSuccess[] = $this->attendeesFormSubmitted;
tlačítka se chovají divně – add a remove jako by odesílají formulář, zatímco submit nedělá nic.
- FJP
- Člen | 124
FJP napsal(a):
Ještě jedna věc, když odkomentuju:
$form->onSuccess[] = $this->attendeesFormSubmitted;
Tak už vím, kde je bug:
$form->addSubmit('submit', 'Další')->onClick[] = callback($this, 'attendeesFormSubmitted');
...
/**
* @param SubmitButton $button
*/
public function attendeesFormSubmitted(SubmitButton $button) {
//$this->getSession('values')->users = $button->form->values;
$products = $button->form->values;
}
HA, vyřešen už i problém 3:
public function attendeesFormAddElementClicked(SubmitButton $button) {
$attendees = $button->parent;
if ($attendees->isAllFilled()) {
$button->parent->createOne();
}
}
Vtipný odpovídat si sám :D, třeba se to někomu bude hodit :D…
Editoval FJP (24. 4. 2015 11:08)