Ergebnis 1 bis 3 von 3

Thema: Extension um select-Feld erweitern

  1. #1
    Contao-Fan
    Registriert seit
    10.01.2010.
    Ort
    Kiel
    Beiträge
    341

    Standard Extension um select-Feld erweitern

    Hallo,

    ich möchte das Event-Modul um ein select-Feld erweitern, aus dem man eine Kategorie auswählen kann. Dafür habe ich eine Tabelle "tl_calendar_events_categories" mit den Feldern "id", "category" und "tstamp" angelegt sowie "tl_calendar_events" um das Feld "category" erweitert. Alle anderen benötigten Dateien habe ich angelegt, so wie im Wiki beschrieben (http://de.contaowiki.org/Vorhandene_Module_erweitern).

    Mein Problem ist, dass zwar eine select-Box im BE angezeigt wird, diese aber nicht gefüllt ist. Es sollen die Kategorien aus "tl_calendar_events_categories" ausgelesen werden. Ich habe versucht, das DCA über meine "tl_calendar_events.php" (also meine neu angelegte Datei in "calendarCategories/dca", nicht die "calendar") entsprechend zu ändern, habe aber längst nicht alles verstanden (auch nachdem ich mir die Einstellungen im calendar-Modul und die Referenz des DCA angesehen habe).

    Meine "tl_calendar_events.php" sieht zur Zeit so aus:
    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    
    // Relationen zu anderen Tabellen
    $GLOBALS['TL_DCA']['tl_calendar_events_categories']['config'] = array
    (
        'dataContainer'               => 'Table',
        'ptable'                      => 'tl_calendar_events',
        'enableVersioning'            => true,
        'onload_callback' => array
        (
                array('tl_calendar_events_categories', 'checkPermission'),
                array('tl_calendar_events_categories', 'generateFeed')
        ),
        'oncut_callback' => array
        (
                array('tl_calendar_events_categories', 'scheduleUpdate')
        ),
        'ondelete_callback' => array
        (
                array('tl_calendar_events_categories', 'scheduleUpdate')
        ),
        'onsubmit_callback' => array
        (
                array('tl_calendar_events_categories', 'adjustTime'),
                array('tl_calendar_events_categories', 'scheduleUpdate')
        )
    );
    
    //Das Auflistungsarray legt fest, wie Datensätze aufgelistet werden.
    $GLOBALS['TL_DCA']['tl_calendar_events_categories']['list']['sorting'] = array
    (
        'mode'                    => 4,
        'fields'                  => array('id DESC'),
        'headerFields'            => array('category'),
        'panelLayout'             => 'filter;sort,search,limit',
        'child_record_callback'   => array('tl_calendar_events_categories', 'listEvents')
    );
    
    //Anzeige im Backend
    $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title,','title,category,', $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);
    
    //Beschreibung des Feldes
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['category'] = array
    (
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['category'],
    'inputType'               => 'select',
    'foreignKey'              => 'tl_calendar_events_categories.category',
    'eval'                    => array('doNotCopy'=>true, 'mandatory'=>true, 'includeBlankOption'=>true, 'tl_class'=>'w50')
    );
    
    ?>
    Sieht hier jemand den Fehler?

    LG
    Tina

  2. #2
    Contao-Fan
    Registriert seit
    10.01.2010.
    Ort
    Kiel
    Beiträge
    341

    Standard

    Ich habe noch ein bisschen rumprobiert und jetzt sieht meine "tl_calendar_events.php" so aus:

    PHP-Code:
    //Anzeige im Backend
    $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title,','title,category,'$GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);

    //Beschreibung des Feldes
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['category'] = array
    (
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['category'],
    'inputType'               => 'select',
    'foreignKey'              => 'tl_calendar_events.category',
    'eval'                    => array('doNotCopy'=>true'mandatory'=>true'includeBlankOption'=>true)
    ); 
    Nun erscheint eine DropDown-Liste, in der zumindest schon die value-Attribute der options gesetzt sind. Mir fehlt also noch die Verbindung zu der neuen Tabelle "tl_calendar_events_categories". Wie kann ich die PK/FK-Relation tl_calendar_events_categories.id = tl_calendar_events.category festlegen?

  3. #3
    Contao-Fan
    Registriert seit
    10.01.2010.
    Ort
    Kiel
    Beiträge
    341

    Standard

    Falls es jemanden interessiert, ich habe es jetzt so gelöst, dass ich eine Funktion geschrieben habe, die die entsprechenden Daten aus der Datenbank holt. Sicher nicht ganz so schön, aber zumindest funktioniert es.

    PHP-Code:
    //Anzeige im Backend
    $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title,','title,category,'$GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);

    //Beschreibung des Feldes
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['category'] = array
    (
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['category'],
    'inputType'               => 'select',
    #'foreignKey'              => 'tl_calendar_events.category',
    'options'                 => get_categories(),
    'eval'                    => array('doNotCopy'=>true'mandatory'=>true'includeBlankOption'=>true)
    );


    // Alle Kategorien holen und als Array zurückgeben
    function get_categories() {
        
    $res mysql_query("SELECT id, category FROM tl_calendar_events_categories ORDER BY tstamp");
        while (
    $row mysql_fetch_row($res)) {
            
    $categories[$row[0]] = $row[1];
        }
        return 
    $categories;

    Falls jemand eine sauberere Lösung kennt, bin ich weiterhin daran interessiert.

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Formular select-menü erweitern
    Von internaix im Forum Formulare
    Antworten: 1
    Letzter Beitrag: 15.01.2011, 18:17
  2. Select-Feld in Abhängigkeit von anderem Select-Feld füllen
    Von Bandyt im Forum Entwickler-Fragen
    Antworten: 1
    Letzter Beitrag: 05.09.2010, 21:07
  3. Newsletter um Feld erweitern
    Von tdoescher im Forum Newsletter
    Antworten: 0
    Letzter Beitrag: 06.10.2009, 09:14

Lesezeichen

Lesezeichen

Berechtigungen

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