Ergebnis 1 bis 2 von 2

Thema: Checkboxen mit false-Wert 0

  1. #1
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard 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.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  2. #2
    Contao-Nutzer
    Registriert seit
    15.01.2016.
    Beiträge
    20

    Standard

    Moin,

    ist mir auch schon aufgefallen, als ich versucht hatte den Datenbanktyp als boolean zu setzen. Ich habe es so gelöst:

    PHP-Code:
            'transmission_shifted_check' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_bstv_month']['transmission_shifted'],
                
    'default'                 => '',
                
    'sql'                     => "int(10) unsigned NULL",
                
    'inputType'               => 'checkbox',
                
    'sql'                     => "char(1) NOT NULL",
                
    'eval'                    => array('submitOnChange'=>true'doNotCopy'=>true),
                
            ), 
    also mit einem leeren String als default und dem Type char(1) als Datenbankfeldtyp.

    MfG, Daniel

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •