vstupní a výstupní hodnoty události onClick[]
- RadaR
- Člen | 46
Ahoj, je nějaká šance získat v události onClick přístup přímo
k objektu formuláře a také k odeslaným hodnotám formuláře? Tak jako se
tyto hodnoty předávají do události onSuccess
?
(function ObjednavkaFormSuccess ($form, $values) {...zpracovani formulare...}
)
Mám generované dynamické submit tlačítko v kontejneru
$fieldsObjpol->addSubmit('deleteobjpol', 'Smazat')->onClick[] = [$this, 'DeleteObjPol'];
a potřeboval bych se v události DeleteObjPol
dostat k
$form
a k $values
ale tak, abych mohl pracovat
přímo s instancí toho objektu i těch odeslaných
hodnot.
Potřebuji při mazání odstranit komponentu a položku z $values dle jejího
ID, aby se následně neukládala do dababáze (v onSuccess totiž při
mazání nejprve smažu položku a pak ukládám celý formulář, aby se při
překreslení formulářa neztratily změny v jiných polích). Komponentu
mažu, aby se neobjevila ve formuláři po ajax požadavku a překreslení
pomocí ->redrawControl
Událost volaná po stisku tlačítka smazat položku – zde se nedostanu k $form a $values = nepoužitelné?
<?php
function DeleteObjPol ($button)
{
//$form = $button->getForm();
//Debugger::barDump($button);
//Debugger::barDump($button->form->getValues()->objpol[2]);
//Debugger::barDump($button->getParent()->name);
$id_objpol = $button->getParent()->name;
if ($this->dataManager->deleteObjpol($id_objpol)):
unset($button->form->getValues()->objpol[$id_objpol]); // ->getValues() vrati pouze kopii hodnot, nejedna se o primy pristup k odeslanym hodnotam!!!
$this->flashMessage('Položka byla smazána', 'success');
else:
$this->flashMessage('Položka nenalezena', 'error');
endif;
}
?>
Takto provádím mazání hodnot z $values a komponenty v události
onSuccess
– a funguje to jak potřebuji –
ale přijde mi to trochu divoký a rád bych měl ten kód spíš v události
na události tlačítku DeleteObjPol
. Jenže tam se nedostanu k
$form
a $values
.
<?php
function ObjednavkaFormSuccess ($form, $values)
{
if ($form->isSubmitted()->name == 'deleteobjpol' and (int) $form->isSubmitted()->getParent()->name > 0):
$id_objpol = $form->isSubmitted()->getParent()->name;
if ($this->dataManager->deleteObjpol($id_objpol)):
unset($values->objpol[$id_objpol]);
$form['objpol']->removeComponent($form['objpol'][$id_objpol]);
$this->flashMessage('Položka byla smazána', 'success');
else:
$this->flashMessage('Položka nenalezena', 'error');
endif;
endif;
...
?>
Editoval RadaR (19. 12. 2016 22:14)
- RadaR
- Člen | 46
Vypadá to, že stačí smazat komponentu a do $values
se to pak
už nedostane. K $form
se v onClick[]
dostanu a
komponentu odstraním. Zdá se, že to funguje:
<?php
/**
* Událost po kliknutí na tlačítko smazání položky objednávky
*
* @param object $button komponenta tlačítka formuláře
*/
function DeleteObjPol ($button)
{
$form = $button->getForm();
$id_objpol = $button->getParent()->name;
if ($this->dataManager->deleteObjpol($id_objpol)):
$form['objpol']->removeComponent($form['objpol'][$id_objpol]);
$this->flashMessage('Položka byla smazána', 'success');
else:
$this->flashMessage('Položka nenalezena', 'error');
endif;
}
?>
Editoval RadaR (19. 12. 2016 23:59)