Formular a rozny pocet poloziek
- peterm
- Člen | 10
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
- peterm
- Člen | 10
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
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
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
Pokud instalujes pres composer, tak autoloading resi composer – robotloader resi zbytek, vetsinou tedy tvoji /app slozku
- peterm
- Člen | 10
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.