Formular a rozny pocet poloziek

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

Caute,

viem ze sa to tu uz riesilo, aj som si precital kopec veci od addContainer cez replicator, ale…
Pustil som sa do jedneho projektu v praci a s Nette na nom zacinam. Jedna z veci, ktora je sucastou projektu je aj formular. V tom si mozu salesovia objednat nejake tie masiny.

Takze, mam tam jeden riadok so 4 polozkami ohladom jedneho part numberu a pod tym tlacitko „Add another product“. To som si v JS spravil, ze mi naklonuje ten riadok a sales moze pridat dalsiu masinu. Lenze ja neviem kolko druhov ich bude chciet. Cize moze objednat jeden typ, moze vziat 10 typov.

Vsetko funguje, ziadny error, ale ked si vyechujem $form->getValues(TRUE);, tak berie vzdy len posledny klon. (co mi pride logicke, kedze sa tie input klony volaju rovnako).

Ako to spravit, aby to bral ako array (napr brand[])? Ja uz mam vsetky data na frontende, len ich potrebujem zhrabnut. Je tam nieco ako $form->addText(‚brand‘, ‚Brand‘)->makeArray() ?

Dakujem

David Matějka
Moderator | 6445
+
0
-

A co ti nevyhovuje na replicatoru? presne tohle resi..

peterm
Člen | 10
+
0
-

No ono nejde ani o to, ze by sa mi nepacila. Skor, ze to nejak neviem rozbehat.
Isiel som podla tohto: https://componette.org/search/?… Po nejakej chvilke som zistil, ze mi strajkuje composer, tak update a sup. Kdyby folder je teraz v priecinku vendor.

Chvilu som aj hladal, ze ako sa to registruje a skusil som toto:

$configurator->createRobotLoader()
	->addDirectory(__DIR__)
	->addDirectory(__DIR__ . '/../libs')
    ->addDirectory(__DIR__ . '/../vendor/Kdyby')
	->register();

Po refreshi FW neprotestoval, tak som pridal pridal z tej linky hore. A tam mi uz vypisalo, ze Call to undefined method Nette\Application\UI\Form::addDynamic().

Sorry za taketo urcite jednoduche veci, ale staci ma nasmerovat a uz sa potom preklikam dalej :) Na frontende spravim hocico hocikedy, len kedze sa switchujem aj na backend, tak mam take obcasne zasekavacky.

Treba to este niekam zadefinovat?

Dik za pomoc.

David Matějka
Moderator | 6445
+
0
-

Pokud mas replicator nainstalovany pres composer, neni treba pridavat robot loaderu ty slozky.

A proc to nefunguje: pridej do bootstrapu:

Kdyby\Replicator\Container::register();

(v navodu je chyba, ma tam byt Container a ne Containers)

nebo registrovuj Kdyby\Replicator\DI\ReplicatorExtension extension

peterm
Člen | 10
+
0
-

Ach, to som si mohol vsimnut. :)
Dakujem.

A k tomu composeru, tak ci tak som to musel prehadzovat, lebo original robot je ->addDirectory(__DIR__ . ‚/../libs‘) a composer my to vsetko nahadzal do vendora, priecinok kdyby a v nom este dalsie veci navyse. A konkretne Kdyby/Replicator/..... az v src hlboko.

Kazdopadne dakujem za pomoc, idem sa s tym pohrat, ze ako to funguje. :)

David Matějka
Moderator | 6445
+
0
-

Pokud instalujes pres composer, tak autoloading resi composer – robotloader resi zbytek, vetsinou tedy tvoji /app slozku

peterm
Člen | 10
+
0
-

Budem si pametat :) Dik.

A ohladom replicatora. Nerozbehol som ho kvoli tomu, ze ked som vytvoril a klikol na button ktory pridal novy riadok, tak sa submitol cely form.
Tak som to len takto narychlo zosmoulil v jquery:

$('#addNewItem').bind('click', function(){
        var cloned = $('.copyThis').clone();
        $('.copyThis').removeClass('copyThis');

        cloned.insertBefore('.insertHere');
        $('.copyThis input').val('');

        $('.copyThis input').each(function(idx){
           var name = $(this).attr('name');
           var nr = parseInt(name.match(/\d/))+1;

           var newName = name.replace(/\d/, nr);
           $(this).attr('name', newName);
        });

    });

Viem, ze to je … divne, ale funguje to :)

Array ( [0] => Array ( [pn] => 1 [brand] => 2 [family] => 3 [qty] => 4 ) [1] => Array ( [pn] => a [brand] => b [family] => c [qty] => d ) )

Hlavne je, ze mi replicator vyrobil arrays, ktore si uz odhandlujem.

Dakujem za pomoc.