Ergebnis 1 bis 9 von 9

Thema: InputType Select / select="selected"

  1. #1
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard InputType Select / select="selected"

    Hi,

    ich suche jetzt schon eine ganze Weile nach einer Möglichkeit, die gewählten Werte eines Selectfeldes im Backend als "selected" zu markieren. Kann mir bitte jemand erklären wie ich das hinbekomme?

    Grüsse
    Sio

  2. #2
    Contao-Fan Avatar von Bandyt
    Registriert seit
    22.04.2010.
    Ort
    Bremen
    Beiträge
    808

    Standard

    Meinst du in einem DCA? Normalerweise übernimmt contao das für dich. Was hast du den an Code?

    Sent from my GT-I9100 using Tapatalk
    Meine Erweiterungen: League Manager | Forum

  3. #3
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Ja in der DCA, ich habe folgenden Eintrag in "fields"

    Code:
    'montag_1' => array(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_sendeplan']['montag_1'],
    			'exclude'                 => true,
    			'search'                  => true,
    			'inputType'               => 'select',
    			'options_callback'        => array('tl_sendeplan', 'getAllDJ'),
    			'eval'                    => array('includeBlankOption'=>true)
    		)
    und als SQL habe ich eine Tabelle:

    Code:
    CREATE TABLE `tl_sendeplan` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `pid` int(10) unsigned NOT NULL default '0',
      `tstamp` int(10) unsigned NOT NULL default '0',
      `headline` varchar(255) NOT NULL default '',
      `alias` varbinary(128) NOT NULL default '',
      `author` int(10) unsigned NOT NULL default '0',
      `date` int(10) unsigned NOT NULL default '0',
      `time` int(10) unsigned NOT NULL default '0',
      `subheadline` varchar(255) NOT NULL default '',
      `groups` varchar(255) NOT NULL default '',
      `week_start` varchar(255) NOT NULL default '',
      `week_end` varchar(255) NOT NULL default '',
      `Montag_1` varchar(255) NOT NULL default ''
      
      PRIMARY KEY  (`id`),
      KEY `pid` (`pid`),
      KEY `alias` (`alias`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    Das options_callback liest alle Mitglieder einer gewählten Gruppe aus.

  4. #4
    Contao-Fan Avatar von Bandyt
    Registriert seit
    22.04.2010.
    Ort
    Bremen
    Beiträge
    808

    Standard

    Normalerweise nutze ich int(10) für solche Felder und verwende die id des Objektes. Was gibt dein callback denn zurück?

    Sent from my GT-I9100 using Tapatalk
    Meine Erweiterungen: League Manager | Forum

  5. #5
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Also ich rufe ja die Methode getAllDJ auf mit Folgendem Inhalt

    PHP-Code:
    public function getAllDJ(DataContainer $dc){
        
        
    $Sendeplan $this->Database->prepare("SELECT * FROM tl_sendeplan WHERE id = ?")->execute($dc->activeRecord->id);
        
    $Sendeplan $Sendeplan->row();
        
    $User $this->Database->prepare("SELECT * FROM tl_member")->execute();

        
    $goups deserialize($Sendeplan['groups']);
        
    $user = array();
        while(
    $User->next()){
            
    $row  $User->row();
            
    $usergroups deserialize($row['groups']);
            
            if(!empty(
    $goups))
                
    $diff array_diff($goups,$usergroups);
            else 
    $diff = array();
            if(empty(
    $diff)){
                
    $user[$row['id']] = $row['firstname'].' '.$row['lastname'];
            };
        }
        
        return 
    $user;
        

    Und zwar kann man weiter oben aussuchen welche Gruppen hier aufgelistet werden sollen. Das Fallback liefert dann ein Array: ("1"=>"Name1","3"=>Name2","4"=>"Name3") ...

    die ID wir dann auch in der Tabelle gespeichert.

  6. #6
    Contao-Fan Avatar von Bandyt
    Registriert seit
    22.04.2010.
    Ort
    Bremen
    Beiträge
    808

    Standard

    Sieht soweit richtig aus. Ich würde mal probieren, ob es hilft das Feld in der DB als int(10) zu definieren.
    Meine Erweiterungen: League Manager | Forum

  7. #7
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Habe ich schon gemacht, alle nötigen Felder haben jetzt die richtigen Einstellungen. Ich hab die Selectbox "author" hinzugefügt, bei ihr wird selected="selected" richtig gesetzt. Aber bei meinen Select-Boxen leider nicht, auch wenn ich die Boxen testweise zu Checkboxen mache wird das Häkchen nicht gesetzt. Muss ich in der DCA etwas in die Filter/Palettes schreiben oder vorher irgendeine onload_callback aufrufen dafür?

    Ich hab ja schon einige Module angeschaut, kann aber nichts finden das den Checkboxen sagt was aktiv sein muss. Der Wert default => $eineID; funktioniert auch nicht, ich habe mit eval dann noch "includeBlankOption" => true; eingegeben. Jetzt hat immer die BlankOption selected="selected".

    Ich hab auch schon länger nach einer Anleitung gesucht, die sich mit solchen Fällen beschäftigt aber habe nichts gefunden.

    Grüsse
    Sio

  8. #8
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Standard

    Also das Feld Athor funktioniert bei mir wunderbar, die Werte werden auch so wie ich es eingebe in die Datenbank gespeichert. Vielleicht hilft es wenn ich eben den Ablauf beschreibe:

    1.) In der Navigation links "Sendeplan" auswählen
    2.) Neuen Eintrag erstellen -> Title = Test
    3.) Eintrag öffnen Gruppe wählen
    4.) Optionen in den Select-Menüs wählen und speichern

    - Author zeigt jetzt die richtige Auswahl an
    - Die eigenen Selects zeigen den leeren Eintrag als "selected" an.

    Ich habe Testweise mal ein paar print_r in die Datei ModulSelect und Widged geschrieben, der Debug-Text zeigt mir dass er für Author einen Wert mitbekommt welcher ausgewählt ist. Für meine Selects gibt es allerdings keinen ausgewählten Wert.

    Meine Selects haben in der Datenbank nun alle `SPALTENNAME` int(10) unsigned NOT NULL default '0'

    An der Datenbank kann es aber nicht liegen, da die Werte richtig gespeichert werden, also bleibt für mich nur ein logischer Schluss dass ich irgendwo meine Selects zusätzlich veröffentlichen muss. Ich denke so wie die DCA Paletts, ohne die werden auch keine Inputfelder im Backend angezeigt.

    Bitte nicht über den Sinn der Erweiterung oder den Sinn der Strucktur hinterfragen, darum kümmer ich mich wenn ich weiß wie ich die selects hinbekomme.

    Meine Contao-Version ist 2.9.5 und hier ist meine DCA:

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You cannot access this file directly!');

    $GLOBALS['TL_DCA']['tl_sendeplan'] = array(

        
    // Config
        
    'config' => array(
            
    'dataContainer'               => 'Table',
            
    'enableVersioning'            => true
        
    ),

        
    // List
        
    'list' => array(
            
    'sorting' => array(
                
    'panelLayout'             => 'filter;sort,search,limit'
            
    ),
            
    'label' => array
            (
                
    'fields'                  => array('headline'),
                
    'format'                  => '%s'
            
    ),
            
    'global_operations' => array(
                
    'all' => array(
                    
    'label'               => &$GLOBALS['TL_LANG']['MSC']['all'],
                    
    'href'                => 'act=select',
                    
    'class'               => 'header_edit_all',
                    
    'attributes'          => 'onclick="Backend.getScrollOffset();" accesskey="e"'
                
    )
            ),
            
    'operations' => array(
                
    'edit' => array(
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_sendeplan']['edit'],
                    
    'href'                => 'act=edit',
                    
    'icon'                => 'edit.gif'
                
    ),
                
    'copy' => array(
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_sendeplan']['copy'],
                    
    'href'                => 'act=paste&amp;mode=copy',
                    
    'icon'                => 'copy.gif'
                
    ),
                
    'cut' => array(
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_sendeplan']['cut'],
                    
    'href'                => 'act=paste&amp;mode=cut',
                    
    'icon'                => 'cut.gif'
                
    ),
                
    'delete' => array(
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_sendeplan']['delete'],
                    
    'href'                => 'act=delete',
                    
    'icon'                => 'delete.gif',
                    
    'attributes'          => 'onclick="if (!confirm(\'' $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . '\')) return false; Backend.getScrollOffset();"'
                
    ),
                
    'show' => array(
                    
    'label'               => &$GLOBALS['TL_LANG']['tl_sendeplan']['show'],
                    
    'href'                => 'act=show',
                    
    'icon'                => 'show.gif'
                
    )
            )
        ),

        
    // Palettes
        
    'palettes' => array(
            
    #'__selector__'                => array('addImage', 'addEnclosure', 'source'),
            
    'default'                      => '{title_legend},headline,alias,author;{sendeplan_legend},groups,montag_1,montag_2,montag_3;'
        
    ),

        
    // Fields
        
    'fields' => array(
            
    'headline' => array(
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_sendeplan']['headline'],
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'sorting'                 => true,
                
    'flag'                    => 1,
                
    'inputType'               => 'text',
                
    'eval'                    => array('mandatory'=>true'maxlength'=>255)
            ),
            
    'alias' => array(
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_sendeplan']['alias'],
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'inputType'               => 'text',
                
    'eval'                    => array('rgxp'=>'alnum''unique'=>true'spaceToUnderscore'=>true'maxlength'=>128'tl_class'=>'w50'),
                
    'save_callback' => array(
                    array(
    'tl_sendeplan''generateAlias')
                )
            ),
            
    'author' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_sendeplan']['author'],
                
    'default'                 => "3",
                
    'exclude'                 => true,
                
    'inputType'               => 'select',
                
    'foreignKey'              => 'tl_user.name',
                
    'eval'                    => array('doNotCopy'=>true'mandatory'=>true'includeBlankOption'=>true'tl_class'=>'w50')
            ),
            
    'groups' => array(
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_sendeplan']['groups'],
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'inputType'               => 'checkboxWizard',
                
    'foreignKey'              => 'tl_member_group.name',
                
    'eval'                    => array('multiple'=>true'feEditable'=>true'submitOnChange'=>true)
                
            ),
            
    'montag_1' => array(
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_sendeplan']['montag_1'],
                
    'default'                 => 3,
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'inputType'               => 'select',
                
    'options_callback'        => array('tl_sendeplan''getAllDJ'),
                
    'eval'                    => array('doNotCopy'=>true,'includeBlankOption'=>true)
            ),
            
    'montag_2' => array(
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_sendeplan']['montag_2'],
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'inputType'               => 'select',
                
    'options_callback'        => array('tl_sendeplan''getAllDJ'),
                
    'eval'                    => array('includeBlankOption'=>true)
            ),
            
    'montag_3' => array(
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_sendeplan']['montag_3'],
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'inputType'               => 'select',
                
    'options_callback'        => array('tl_sendeplan''getAllDJ'),
                
    'eval'                    => array('includeBlankOption'=>true)
            )
        )
    );

    class 
    tl_sendeplan extends Backend{
        
        public function 
    __construct(){
            
    parent::__construct();
        }
        
        public function 
    getAllDJ(DataContainer $dc){
            
            
    $Sendeplan $this->Database->prepare("SELECT * FROM tl_sendeplan WHERE id = ?")->execute($dc->activeRecord->id);
            
    $Sendeplan $Sendeplan->row();
            
    $User $this->Database->prepare("SELECT * FROM tl_member")->execute();

            
    $goups deserialize($Sendeplan['groups']);
            
    $user = array();
            while(
    $User->next()){
                
    $row  $User->row();
                
    $usergroups deserialize($row['groups']);
                
                if(
    is_array($goups))
                    
    $diff array_diff($goups,$usergroups);
                else 
    $diff = array();
                if(empty(
    $diff)){
                    
    $user[$row['id']] = $row['firstname'].' '.$row['lastname'];
                };
            }
            
            return 
    $user;
            
        }
        
        public function 
    generateAlias($varValueDataContainer $dc){
            
    $autoAlias false;

            
    // Generate alias if there is none
            
    if (!strlen($varValue))
            {
                
    $autoAlias true;
                
    $varValue standardize($dc->activeRecord->headline);
            }

            
    $objAlias $this->Database->prepare("SELECT id FROM tl_sendeplan WHERE alias=?")
                                       ->
    execute($varValue);

            
    // Check whether the news alias exists
            
    if ($objAlias->numRows && !$autoAlias)
            {
                throw new 
    Exception(sprintf($GLOBALS['TL_LANG']['ERR']['aliasExists'], $varValue));
            }

            
    // Add ID to alias
            
    if ($objAlias->numRows && $autoAlias)
            {
                
    $varValue .= '-' $dc->id;
            }

            return 
    $varValue;
        }
        
    }

    ?>
    Dazu meine config.php

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You cannot access this file directly!');

        
    /**
         * Back end modules
         */
        
    array_insert($GLOBALS['BE_MOD']['content'],4,array(
            
    'sendeplan' => array('tables'=>array('tl_sendeplan'))
        ));
        
        
    /**
         * Front end modules
         */
        
    array_insert($GLOBALS['FE_MOD'],2,array(
            
    'sendeplan' => array(
                
    'sendeplanDJ' => 'ModuleSendeplanDJ',
                
    'sendeplan'   => 'ModuleSendeplan'
            
    )
        ));

    ?>
    und die SQL

    Code:
    CREATE TABLE `tl_sendeplan` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `tstamp` int(10) unsigned NOT NULL default '0',
      `headline` varchar(255) NOT NULL default '',
      `alias` varbinary(128) NOT NULL default '',
      `author` int(10) unsigned NOT NULL default '0',
      `date` int(10) unsigned NOT NULL default '0',
      `time` int(10) unsigned NOT NULL default '0',
      `subheadline` varchar(255) NOT NULL default '',
      `groups` varchar(255) NOT NULL default '',
      `week_start` varchar(255) NOT NULL default '',
      `week_end` varchar(255) NOT NULL default '',
      `Montag_1` int(10) unsigned NOT NULL default '0',
      `Montag_2` int(10) NOT NULL default '0',
      `Montag_3` int(10) NOT NULL default '0',
      `Dienstag_1` int(10) NOT NULL default '0',
      `Dienstag_2` int(10) NOT NULL default '0',
      `Dienstag_3` int(10) NOT NULL default '0',
      `Mittwoch_1` int(10) NOT NULL default '0',
      `Mittwoch_2` int(10) NOT NULL default '0',
      `Mittwoch_3` int(10) NOT NULL default '0',
      `Donnerstag_1` int(10) NOT NULL default '0',
      `Donnerstag_2` int(10) NOT NULL default '0',
      `Donnerstag_3` int(10) NOT NULL default '0',
      `Freitag_1` int(10) NOT NULL default '0',
      `Freitag_2` int(10) NOT NULL default '0',
      `Freitag_3` int(10) NOT NULL default '0',
      `Samstag_1` int(10) NOT NULL default '0',
      `Samstag_2` int(10) NOT NULL default '0',
      `Samstag_3` int(10) NOT NULL default '0',
      `Sonntag_1` int(10) NOT NULL default '0',
      `Sonntag_2` int(10) NOT NULL default '0',
      `Sonntag_3` int(10) NOT NULL default '0'
      
      PRIMARY KEY  (`id`),
      KEY `alias` (`alias`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    Grüsse
    Sio

  9. #9
    Contao-Fan Avatar von Sioweb
    Registriert seit
    12.08.2011.
    Ort
    Düsseldorf
    Beiträge
    405
    User beschenken
    Wunschliste

    Lachendes Gesicht

    Ahm tut mir voll leid das ich hier 3 mal hinter einander poste, aber ich finde keinen "Edit"-Button.

    Ich hab die Extension nun mit dem Creator erstellt und nun funktionieren alle Selects. Da ich generell aber auch gerne ohne Creator entwickeln können würde(weil Baum) werde ich die Extension irgendwann mal analysieren und mit meiner Version vergleichen. Wenn ich was entsprechendes gefunden habe, schreibe ich ein Tutorial drüber ^^

    (btw. tolle Extension dieser Creator)

    Grüsse und Danke
    Sio

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
  •