Checkboxen mit false-Wert 0
Ich habe folgenden Code:
dca/tl_trainerlizenzen.php:
PHP-Code:
<?php
$GLOBALS['TL_DCA']['tl_trainerlizenzen'] = array
(
// Palettes
'palettes' => array
(
'__selector__' => array('codex', 'help'),
'default' => 'verification,{dosb_legend},license_number_dosb,button_license,view_pdf,button_pdf;{marker_legend},marker;{name_legend},vorname,name,titel,geburtstag,geschlecht;{adresse_legend},strasse,plz,ort,email,telefon;{verband_legend},verband;{lizenz_legend},lizenznummer,lizenz;{lizenzver_legend},erwerb,verlaengerung1,verlaengerung2,verlaengerung3,verlaengerung4,verlaengerung5;{lizenzbis_legend},gueltigkeit;{codex_legend},codex,help;{datum_legend},letzteAenderung,setHeute;{hinweise_legend:hide},bemerkung;{published_legend},published'
),
// Subpalettes
'subpalettes' => array
(
'codex' => 'codex_date',
'help' => 'help_date'
),
// Fields
'fields' => array
(
// Ehrencodex anerkannt
'codex' => array
(
'label' => &$GLOBALS['TL_LANG']['tl_trainerlizenzen']['codex'],
'inputType' => 'checkbox',
'default' => true,
'explanation' => 'trainerlizenzen_kodex',
'filter' => true,
'eval' => array
(
'mandatory' => false,
'tl_class' => 'w50',
'helpwizard' => true,
'isBoolean' => true,
'submitOnChange' => true
),
'load_callback' => array
(
array('tl_trainerlizenzen', 'getNo')
),
'save_callback' => array
(
array('tl_trainerlizenzen', 'setNo')
),
'sql' => "char(1) NOT NULL default ''"
),
// Datum Ehrencodex
'codex_date' => array
(
'label' => &$GLOBALS['TL_LANG']['tl_trainerlizenzen']['codex_date'],
'inputType' => 'text',
'exclude' => false,
'search' => true,
'sorting' => true,
'flag' => 8,
'filter' => true,
'eval' => array
(
'rgxp' => 'date',
'datepicker' => true,
'tl_class' => 'w50 wizard',
'doNotCopy' => true
),
'sql' => "varchar(11) NOT NULL default ''"
),
// Erste-Hilfe-Ausbildung absolviert
'help' => array
(
'label' => &$GLOBALS['TL_LANG']['tl_trainerlizenzen']['help'],
'inputType' => 'checkbox',
'default' => true,
'filter' => true,
'explanation' => 'trainerlizenzen_kodex',
'eval' => array
(
'mandatory' => false,
'tl_class' => 'w50 clr',
'helpwizard' => true,
'isBoolean' => true,
'submitOnChange' => true
),
'load_callback' => array
(
array('tl_trainerlizenzen', 'getNo')
),
'save_callback' => array
(
array('tl_trainerlizenzen', 'setNo')
),
'sql' => "char(1) NOT NULL default ''"
),
// Datum der Erste-Hilfe-Ausbildung
'help_date' => array
(
'label' => &$GLOBALS['TL_LANG']['tl_trainerlizenzen']['help_date'],
'inputType' => 'text',
'exclude' => false,
'search' => true,
'sorting' => true,
'flag' => 8,
'filter' => true,
'eval' => array
(
'rgxp' => 'date',
'datepicker' => true,
'tl_class' => 'w50 wizard',
'doNotCopy' => true
),
'sql' => "varchar(11) NOT NULL default ''"
),
),
);
class tl_trainerlizenzen extends \Backend
{
/**
* Funktion getNo
* ==============
* Konvertiert den Feldwert 0 auf ''
*/
public function getNo($varValue)
{
switch($varValue)
{
case '0':
return '';
default:
return $varValue;
}
}
/**
* Funktion setNo
* ==============
* Setzt den Feldwert auf 0 oder 1
*/
public function setNo($varValue)
{
switch($varValue)
{
case '1':
return $varValue;
default:
return '0';
}
}
}
Kurz zur Funktionsweise: Ist die Checkbox codex oder help gesetzt, wird die entsprechende Subpalette mit den Feldern codex_date oder codex_help angezeigt.
In der Datenbank wird bei Checkboxen '1' oder '' gespeichert. Ich will jetzt aber '1' oder '0' haben, weswegen ich die beiden load_callback/save_callback hinzugefügt habe. Die '0' in der Datenbank bringt aber die Subpalettenfunktion durcheinander. Offensichtlich wird die Subpalette generiert bevor mein load_callback von '0' auf '' korrigiert hat. D.h. die Subpalette ist immer da. Ist das ein Bug?
Okay, ich könnte das Problem elegant umgehen. Ich brauche die '0' ja nur im Export und kann da noch eine Konvertierung vornehmen. Aber die Frage wollte ich trotzdem mal loswerden. :D