addDynamic pridani dalsich poli bez nutnosti vyplneni predeslich

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vosy
Člen | 532
+
0
-

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

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

Máš tam required políčka, či-li to kontroluje validaci a mělo by stačit nastavit containeru ->setValidationScope(FALSE)

vosy
Člen | 532
+
0
-

jj presne, dix.

jeste bych se chtel zeptat jestli v

$replicator = $form->addDynamic(‚cestujiciArr‘, function (Container $container)
 {…}

se mohu dostat k nejakemu ID.
jde mi oto aby v prvnim formulari byl jmeno, prijmeni, telefon a v druhem pridanem uz bylo jen jmeno a prijmeni