Artikeltabelle zusätzliches Feld speichert nur 1, nicht 0

Ich habe die oxarticles-Tabelle um ein Feld “bmauswahl” erweitert. Das ist eine Checkbox, die in der Tabelle als tinyint(1) angelegt ist. Ich habe den Code im Template (admin/article_variant.tpl) und das Feld in der Tabelle analog zu oxactive angelegt, nur der Name unterscheidet sich. Habe natürlich auch die Views neu generiert und Cache gelöscht etc.

Das Problem ist, daß das Feld nur gespeichert wird, wenn die Checkbox aktiviert ist (Wert 1). Wenn ich sie deaktiviere, wird es nicht gespeichert und es bleibt “1” bestehen.

Das Problem scheint nur Checkboxen zu betreffen. Stringfelder funktionieren korrekt.

Mir ist aufgefallen, daß beim Speichern der Varianten das Feld nur dann übergeben wird, wenn es den Wert “1” hat. Ist der Wert “0”, fehlt das Feld im Array. Fehlende Felder werden offensichtlich irgendwo in den Tiefen des Systems “automatisch” auf 0 gesetzt. Es hat den Anschein, daß das nur mit den OXID-eigenen Feldern (wie oxactive) passiert, nicht aber mit hinzugefügten Feldern.

Das Problem besteht unabhängig vom default-Wert des tinyint-Feldes in der Tabelle. Ich habe beide Möglichkeiten probiert.

Ich hatte denselben Code in OXID 4.7.8, dort hat er funktioniert. Jetzt aber, mit 4.10.4, tritt das Problem auf.

Wäre für einen Tip, wie ich das lösen kann, dankbar.

Ich glaube, ich habe die Ursache gefunden.

Im Controller article_variant.php werden checkboxen speziell behandelt.


// checkbox handling
if (is_array($aParams) && !isset($aParams['oxarticles__oxactive'])) {
    $aParams['oxarticles__oxactive'] = 0;
}

Man muss also wohl die Klasse Article_Variant erweitern.
Das ist etwas unschön, wegen so einer Lappalie ein Modul schreiben zu müssen.

Noch ein Nachtrag der Vollständigkeit halber: es hatte auch in der Version 4.7.8 nicht von Haus aus funktioniert. Dort hatte ich eine Modifikation in article_variant.php gemacht und natürlich vergessen. hüstel :o

alternativ, wenn man den Controller nicht erweitern möchte, geht auch das hier:

Danke für den Hinweis. Habe das allerdings nicht zum Laufen gebracht, der Kontext ist ein anderer als in dem article_variant.tpl.
Ich habe es jetzt bei der Modifikation belassen, diesmal aber sauber dokumentiert.