Az élet úgy hozta, hogy eddig elkerültem a Joomla Form kezelőjének Checkbox típusát. A dolog első ránézésre szépen működik, de ha próbálgatni kezdjük az első mentést követően mindig bekapcsolt állapotú marad, és elsőre semmilyen szép szóval nem lehet kikapcsolt állapotra rábeszélni.
Tekintettel arra, hogy a mostani munkához szükségem volt rá, és kikerülni sem szerettem volna, ezért végigkerestem elsőre a weben elérhető dolgokat, majd a rendszert is megnéztem működés közben.
Az iránymutatást Posting Unchecked Checkboxes in HTML Forms cikkben találtam meg, ezt követően egyszerű vizsgálattal kiderült mi is a probléma. A HTML megközelítés szerint a checkbox csak akkor szerepel a POST-ban, ha az bekapcsolt állapotú. Amennyiben kikapcsoljuk, nincs benne a POST-ban. Ez gyorsan ellenőriztem is a beérkező modell osztályban és valóban a kikapcsolt vezérlő nem került be az érkező adatcsomagba. Néztem tovább mi is történik ezzel a csomaggal, és rá kellett döbbenjek, hogy a csomagban nem szereplő vezérlő értékét egyszerűen becseréli egy szimpla ‘1’ azaz igaz értékre a Table::Store működése során.
Ezt követően a megoldás már egyszerű volt, nincs több dolgunk, mint a Model:: Save függvényében a beérkező adatokat ellenőrizni, és amennyiben hiányzik a nekünk szükséges vezérlő értéke, azt mint kikapcsolt állapot be kell illesztenünk az adatfolyamba az alábbiak szerint:
class MyModelName extends JModelAdmin { public function save($data) { if (!isset($data['chbcontrolname'])) // Ellenőrizzük érkezett-e a controltól valamilyen adat { $data['chbcontrolname'] = 0; // Ha nem érkezett az alapértelmezett állapotot felvesszük } return parent::save($data); // Végrehajtjuk a mentést } }
További információk:
Joomla PHP: Checkbox won’t uncheck
Posting Unchecked Checkboxes in HTML Forms