Kdyby/Replicator zmaže riadok a potom pridá nový
- orech
- Člen | 40
Zdravím,
naištaloval som doplnok https://componette.org/search/?….
Formulár začínam defaultne s 8 riadkami. Keď zmažem 8., tak sa stránka
refreshne a ostane tam 7 riadkov – super, takto to má byť. No keď
nepotrebujem 7 a 7. zmažem, stránka sa refreshne, a miesto 6 je tam stále
7, no bez počatočných hodnôt (Presne, ako keď by som dal pridať
riadok).
Stáva sa to len pri úplne novom „čistom“ formulári, nie pri editácii
predvyplnených hodnôt.
Vytvorenie formuláru a predvyplnenie:
$removeSheet = callback($this, 'removeSheet');
$removeQuestion = $this->translator->translate('templates.deleteQuestion');
$sheets = $form->addDynamic('sheets', function(Container $sheet) use ($removeSheet, $removeQuestion) {
$sheet->addText('from', 'forms.ui.from')
->addRule(Form::FILLED, 'forms.error.enterFrom')
->addRule(Form::PATTERN, 'forms.error.timePattern', '^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$');
// Dalsie riadky
// ...
// Remove button
$sheet->addSubmit('remove', 'forms.ui.remove')
->setAttribute('onclick', "return confirm('$removeQuestion');")
->setValidationScope(false)
->addRemoveOnClick($removeSheet);
}, 8;
// Add new sheet
$sheets->addSubmit('add', 'forms.ui.add')
->setValidationScope(false)
->addCreateOnClick();
// Default values
for ($i = 0; $i < 8; $i++) {
$form['sheets'][$i]->setDefaults(array(
'from' => $i . ':00' // Predyplnuje sa viac, no je zbytocne tu zobrazovat vsetko
));
}
Callback po mazaní – služí len pri editácii, kde sa jednotlivé riadky zmažú aj z DB:
public function removeSheet(\Kdyby\Replicator\Container $replicator, Container $sheetContainer)
{
$id = $sheetContainer->components['id']->value;
if (is_numeric($id)) {
$sheet = $this->sheets->findOneBy(['id' => $id]);
if ($sheet) {
$this->entry->removeSheet($sheet);
$this->sheets->em()->remove($sheet);
$this->sheets->em()->flush();
}
}
}
Vopred ďakujem za pomoc.
- David Matějka
- Moderator | 6445
problem bude s tema Default values, ktere predvyplnujes – ty totiz incializuji ty kontejnery (ale zobrazi se prazdny kvuli chybe v kdyby/replicatoru)
EDIT:
resenim by mohlo byt zkontrolovat $form->isSubmitted()
,
problem je, ze v tovarne neni form pripojen k presenteru, takze ho budes muset
pripojit rucne, treba
$this[$name] = $form;
//nebo
new Form($this, $name);
//$name je nazev komponenty, muzes si to vyzadat jako prvni parametr createComponent* metody
a nebo to provest v action
- orech
- Člen | 40
David Matějka napsal(a):
problem bude s tema Default values, ktere predvyplnujes – ty totiz incializuji ty kontejnery (ale zobrazi se prazdny kvuli chybe v kdyby/replicatoru)
To, že sú prázdne, mi nevadí. Skôr mi vadí, že ak dám zmazať riadok, tak sa zmaže, no pridá sa na jeho miesto nový – no nechcem tam pridávať nový. Posledný riadok sa dá zmazať v pohode, no predposledný, ktorý sa stane posledným už nie. Zmažem a vytvorí sa znova. Ako keby tam muselo byť presne 7 riadkov, také číslo ale nikde nemám.
EDIT:
resenim by mohlo byt zkontrolovat
$form->isSubmitted()
, problem je, ze v tovarne neni form pripojen k presenteru, takze ho budes muset pripojit rucne, treba$this[$name] = $form; //nebo new Form($this, $name); //$name je nazev komponenty, muzes si to vyzadat jako prvni parametr createComponent* metody
a nebo to provest v action
Formulár je v komponente a riadky formulára inicializujem v metóde attached (napr. kvôli editácii, keď chcem zobraziť len 6 riadkov, nie defaultných 8):
public function attached($presenter)
{
parent::attached($presenter);
$this->_setDefaultValues();
}
EDIT:
Keď som zakomentoval setovanie defaultných hodnôt, tak to funguje správne. Teraz ale neviem, ako to spraviť tak, aby odsetovali pred mazaním.
Editoval orech (4. 8. 2015 12:42)