Contao-Camp 2024
Ergebnis 1 bis 7 von 7

Thema: DCA foreign Key-Filter und Anzeigetilte

  1. #1
    Contao-Nutzer
    Registriert seit
    20.11.2018.
    Beiträge
    35

    Standard DCA foreign Key-Filter und Anzeigetilte

    Hallo,

    für ein Backend-Modul möchte ich ein Dropdown-Menü für Heim- und Auswärtsmannschaft haben. Vorher war das ein freies Textfeld was ich wie folgt umgesetzt hatte:

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['home_team'] = array
    (
        
    'label'     => &$GLOBALS['TL_LANG']['tl_calendar_events']['home_team'],
        
    'exclude'   => true,
        
    'search'    => true,
        
    'inputType' => 'text',
        
    'eval'      => array('maxlength'=>255'tl_class'=>'w50'),
        
    'sql'       => "char(1) NOT NULL default ''"
    ); 
    Da ich die Mannschaftswappen ohnehin in den Files habe und in der event_list später auch das zugehörige Bild angezweigt werden soll, soll einfach der Titel des Bildes als Auswahlmöglichkeit und im Drop-Downmenü und später auch als Anzeige in der Eventliste stehen.

    Nun habe ich das bereits geschrieben:

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['home_team'] = array
    (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['home_team'],
                
    'exclude'                 => true,
                
    'inputType'               => 'select',
                
    'foreignKey'              => 'tl_sfiles',
                
    'eval'                    => array('multiple'=>false'chosen'=>true),
                
    'sql'                     => "blob NULL",
            ), 
    Wie filtere ich bei foreignKey nun nur auf Bilder, die "files/teams/" im Pfad beinhalten? Und wie stelle ich ein, dass der Title angezeigt wird?

  2. #2
    Contao-Fan Avatar von Fehrmann
    Registriert seit
    04.07.2009.
    Ort
    Wismar
    Beiträge
    580
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hi,

    normalerweise gibt die foreinKey-Beziehung folgendermaßen an:

    Code:
    'foreignKey' => 'tabelle.field'
    Das wird in deinem Fall aber nicht funktionieren. Das Feld in der Tabelle 'tl_files', wo der Titel (nicht der Dateiname) drin steht, heißt 'meta' und ist ein serialisiertes Array. Ich würde an dieser Stelle dann einen 'options_callback' anwenden.

    Viele Grüße
    René
    Software-Entwickler Backend/Frontend

  3. #3
    Contao-Nutzer
    Registriert seit
    20.11.2018.
    Beiträge
    35

    Standard

    Danke für die Antwort.

    Ich habe mir options_callback hier angeschaut, da ich die noch nicht verwendet habe.

    Dort wird dies als Beispiel-Callbackfunktion aufgeführt:

    PHP-Code:
    <?php
    class myClass
    {
        
    /**
         * options_callback: Ermöglicht das Befüllen eines Drop-Down-Menüs oder einer Checkbox-Liste mittels einer individuellen Funktion.
         * @param  $dc
         * @return array
         */
        
    public function myOptionsCallback(DataContainer $dc)
        {
            return array(
    'id1' => 'Value1''id2' => 'Value2');
        }
    }
    Kann ich die Funktion auch so schreiben, dass sich die Arrays automatisch anhand der tl_files generieren und da anhand der oben beschriebenen Auswahlmethode? Ziel ist es ja, dass man nur das Bild mit Titel in der Dateiverwaltung befüllen muss bzw. man auch eines entfernen kann und sich die Liste somit automatisch aktualisiert.

    Wenn ja wie geht das?

  4. #4
    Contao-Nutzer
    Registriert seit
    20.11.2018.
    Beiträge
    35

    Standard

    Kann mir da jemand helfen bzw. sagen wie und wo ich die Info dazu finden kann. Ich finde die Antwort hier zu nicht wirklich.

  5. #5
    Contao-Fan
    Registriert seit
    16.11.2012.
    Ort
    Freiburg
    Beiträge
    539

    Standard

    Wie lautet dein aktueller Code?
    Grüße
    Alex

  6. #6
    Contao-Nutzer
    Registriert seit
    20.11.2018.
    Beiträge
    35

    Standard

    Code:
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['home_team'] = array
    (
                'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['home_team'],
                'exclude'                 => true,
                'inputType'               => 'select',
                'foreignKey'              => 'tl_sfiles',
                'eval'                    => array('multiple'=>false, 'chosen'=>true),
                'sql'                     => "blob NULL",
            ),

  7. #7
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Der Options-Callback könnte wie folgt aussehen:

    PHP-Code:
    use Contao\FilesModel;
    use 
    Contao\StringUtil;

    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['home_team']['options_callback'] = static function () {
        
    $collection FilesModel::findMultipleByBasepath('files/teams/');
        
    $options    = [];

        
    /** @var FilesModel $file */
        
    foreach ($collection ?: [] as $file) {
            if (
    $file->type !== 'file') {
                continue;
            }

            
    $options[StringUtil::binToUuid($file->uuid)] = pathinfo($file->namePATHINFO_FILENAME);
        }

        return 
    $options;
    }; 

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
  •