addDynamic pridani dalsich poli bez nutnosti vyplneni predeslich
- vosy
- Člen | 532
ahoj povocu addDynamic https://componette.org/search/?… si chci pridavat kopie formularu. mam tam policka ktere musi byt vyplneny, pokud polic vyplnim a zmacknu ADD tak se zobrazi dalsi formular, coz je v poradku. ale chtel bych abych mohl formulare naklikat dopredu a kontrola vyplneni policek by se vykonala az po nejakem hlavnim tlacitku ULOZIT.
takto:
<?php
namespace FrontModule\Form\Letenky;
use Nette\Forms\Container;
use \Nette\Application\UI\Form;
use \Nette\Mail\Message;
class LetenkyFormFactory
{
public function __construct()
{
}
public function poptavkaForm($opt=null)
{
$form = new \Vosy\MyForm();
$form->addGroup();
$replicator = $form->addDynamic('cestujiciArr', function (Container $container)
{
$container->currentGroup = $container->form->addGroup();
$container->addText('name', 'Jméno:')
->setRequired('Vyplňte své jméno.')
->setAttribute('placeholder','Vaše jméno')
->setAttribute('class', 'alert');
$container->addText('surname', 'Příjmení:')
->setRequired('Vyplňte své příjmení.')
->setAttribute('placeholder','Vaše příjmení')
->setAttribute('class', 'alert');
$container->addText('birthday', 'Datum narození:')
->setRequired('Vyplňte datum svého narození.')
->setAttribute('class', 'alert');
$container->addText('phone', 'Telefon:')
->setRequired('Vyplňte svůj telefon.')
->setAttribute('placeholder','Vaše telefonní číslo')
->setAttribute('class', 'alert');
$container->addText('email', 'Email:')
->setRequired('Vyplňte svůj email.')
->setAttribute('placeholder','Váš email')
->setAttribute('class', 'alert');
}, 1);
/** @var \Kdyby\Replicator\Container $replicator */
$replicator->addSubmit('add', 'Přidat osobu')
->setAttribute('class', 'btn btn-small btn-success')
->addCreateOnClick(true);
$form->setCurrentGroup(NULL);
$form->addGroup();
$repCesta = $form->addDynamic('cestyArr', function (Container $container)
{
$container->currentGroup = $container->form->addGroup();
$datumOdletuCcaArr = array(1=>'±1 dní', '±2 dní', '±3 dní', '±4 dní', '±5 dní', '±6 dní', '±7 dní', '±8 dní', '±9 dní', '±10 dní', '±11 dní', '±12 dní', '±13 dní', '±14 dní');
$container->addText('datumOdletu', 'Datum odletu:')
->setRequired('Vyplňte datum odletu.')
->setAttribute('placeholder','Datum odletu')
->setAttribute('class', 'alert');
$container->addSelect('datumOdletuPlusMinusDny', '', $datumOdletuCcaArr);
$container->addText('odletZ', 'Odlet z:')
->setRequired('Vyplňte své místo odletu.')
->setAttribute('placeholder','Místo odletu')
->setAttribute('class', 'alert');
$container->addText('cilLetu', 'Cíl letu:')
->setRequired('Vyplňte svůj cíl letu.')
->setAttribute('placeholder','Cíl letu')
->setAttribute('class', 'alert');
$container->addText('stopOverMesto', 'Stopover:')
->setRequired('Vyplňte stopover město.')
->setAttribute('placeholder','město')
->setAttribute('class', 'alert');
$stopOverCcaArr = array(1=>'1 dní', '2 dní', '3 dní', '4 dní', '5 dní', '6 dní', '7 dní', '8 dní', '9 dní', '10 dní', '11 dní', '12 dní', '13 dní', '14 dní');
$container->addSelect('stopOverPocetDni', '', $stopOverCcaArr)
->setRequired('Vyplňte stopoverpočet dní.');
}, 1);
$form->setCurrentGroup(NULL);
/** @var \Kdyby\Replicator\Container $replicator */
$repCesta->addSubmit('addX', 'Přidat cestu')
->setAttribute('class', 'btn btn-small btn-success')
->addCreateOnClick(true);
return $form;
}
}
dle navodu:
okud chcete, aby šly Containery „naklikat“ dopředu, bez nutnosti všechny
vyplňovat, stačí přidat jako první argument TRUE. Tento příklad se hodí,
pokud je uživatel zvyklý si políčka „naklikat“ a pak je vyplnit najednou
a odeslat.
$user->addSubmit('add', 'Přidat')
->addCreateOnClick(TRUE, function (Kdyby\Replicator\Container $replicator, Container $user) { .... });
netusim jak presne by v mem pripade mela vypadat fce
->addCreateOnClick(TRUE, function (Kdyby\Replicator\Container $replicator,
Container $user) { …
- romiix.org
- Člen | 343
U mňa je to callback
s invalidáciou snippetu.
$replicator->addSubmit('addAjax', 'Pridať položku')
->setValidationScope(FALSE)
->setAttribute('class', 'ajax')
->addCreateOnClick(TRUE, $invalidateCallback);
$invalidateCallback = function () use ($presenter) {
$presenter->invalidateControl('addReportForm');
};
- Jiří Nápravník
- Člen | 710
Máš tam required políčka, či-li to kontroluje validaci a mělo by stačit nastavit containeru ->setValidationScope(FALSE)