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