Ergebnis 1 bis 6 von 6

Thema: Verknüpfung zwischen Nachrichtenarchiv und Datenbank des eigenen Moduls

  1. #1
    Contao-Nutzer
    Registriert seit
    18.05.2016.
    Beiträge
    29

    Standard Verknüpfung zwischen Nachrichtenarchiv und Datenbank des eigenen Moduls

    Hallo,

    ich hätte eine Frage, und zwar habe ich ein eigens erstelltes Modul mit einer Datenbank, die im Backend bearbeitet und gefüllt werden kann.

    Nun würde ich gerne im Backend-Bereich des Moduls die möglichkeit haben, den einzelnen Einträgen einträge eines Nachrichtenarchivs zuweisen zu können.
    Der Event-Eintrag in der eigenen Datenbank trifft zum Beispiel auf einige der News zu, die im Nachrichtenarchiv vorhanden sind und müssen dementsprechend damit in verbindung gebracht werden können.

    Wie setze ich das am besten um? eine eigene Verknüpfungstabelle erstellen im Modul? Und wie baue ich das ganze in die BE-Seite ein, um es einfach verwaltbar zu machen?

    Danke schonmal für die Antwort

  2. #2
    Contao-Nutzer Avatar von benzin
    Registriert seit
    06.02.2016.
    Ort
    Essen/Düsseldorf, NRW
    Beiträge
    84
    Partner-ID
    11060

    Standard

    Hallo DerPanda,

    du kannst dafür deiner DCA ein Select- oder Checkbox-Feld hinzufügen. Dann fügst du diesem eine Relation zur tl_news hinzu und den entsprechenden foreignKey.
    Nähere Informationen findest du in der DCA-Dokumentation oder z.B. an den folgenden Stellen im Core:

    - Das Autor-Select-Feld in der tl_article, das aus der tl_user befüllt wird
    - Das Gruppen-Checkbox-Feld in der tl_member, das aus der tl_member_groups befüllt wird

    Grüße
    benzin

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

    Standard

    Ich habe dazu in meiner Erweiterung [newslinklist] folgende Lösung in newslinklist/dca/tl_content:
    PHP-Code:
    // Nachrichtenliste anzeigen

    $GLOBALS['TL_DCA']['tl_content']['fields']['newslinklist'] = array
    (
        
    'label'                => &$GLOBALS['TL_LANG']['tl_content']['newslinklist'],
        
    'exclude'              => true,
        
    'options_callback'     => array('tl_content_newslinklist''getNewslinklist'),
        
    'inputType'            => 'checkboxWizard',
        
    'eval'                 => array('mandatory'=>false'multiple'=>true'class'=>'clr'),
        
    'sql'                  => "blob NULL"
    );

    class 
    tl_content_newslinklist extends Backend
    {

        public function 
    getNewslinklist(DataContainer $dc)
        {
            
    // Erlaubte Archivliste laden
            
    ($GLOBALS['TL_CONFIG']['newslinklist_archive']) ? $newsarchive unserialize($GLOBALS['TL_CONFIG']['newslinklist_archive']) : $newsarchive = array();

            
    // Nachrichtenarchive laden und zuordnen
            
    $objNewsArchive $this->Database->prepare("SELECT id, title FROM tl_news_archive")
                                             ->
    execute();
            while(
    $objNewsArchive->next())
            {
                if(
    in_array($objNewsArchive->id$newsarchive))
                {
                    
    $NewsArchiv[$objNewsArchive->id] = $objNewsArchive->title;
                }
            }
            
            
    $von $GLOBALS['NEWSLINKLIST']['start'];
            
    $bis $GLOBALS['NEWSLINKLIST']['stop'];
            
            
    $array = array();
            if(
    $von && $bis$objNews $this->Database->prepare("SELECT id, pid, headline, date, published, start, stop FROM tl_news WHERE date > ? AND date < ? ORDER BY date DESC")->execute($von$bis);
            else 
    $objNews $this->Database->prepare("SELECT id, pid, headline, date, published, start, stop FROM tl_news ORDER BY date DESC")->execute();
            while(
    $objNews->next())
            {
                
    // Veröffentlichungsstatus ermitteln
                
    if((!$objNews->start || $objNews->start time()) && (!$objNews->stop || $objNews->stop time()) && $objNews->published$published true;
                else 
    $published false;
                
                if(
    $NewsArchiv[$objNews->pid])
                {
                    if(
    $published$array[$objNews->id] =  date($GLOBALS['TL_CONFIG']['datimFormat'], $objNews->date).' <b>'.$objNews->headline.'</b> ['.$NewsArchiv[$objNews->pid].']';
                    else 
    $array[$objNews->id] =  date($GLOBALS['TL_CONFIG']['datimFormat'], $objNews->date).' <i>'.$objNews->headline.'</i> ('.$GLOBALS['TL_LANG']['tl_content']['nll_unpublished'].') ['.$NewsArchiv[$objNews->pid].']';
                }
            }
            return 
    $array;

        }


    In mein Feld vom Typ checkboxWizard lese ich alle Nachrichtentitel mit der Nachrichten-ID als Index von den erlaubten Nachrichtenarchiven ein. Da ich über 12.000 Nachrichten im System habe, habe ich noch eine Einschränkung via Zeitraum geschaffen.
    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

  4. #4
    Contao-Nutzer
    Registriert seit
    18.05.2016.
    Beiträge
    29

    Standard

    So,

    ich hab mir das ganze mal angeschaut eben und hätte dann doch eine Frage.
    Wenn ich das ganze mit
    'foreignKey' => 'tl_news.headline',
    mache, krieg ich ja alle einträge der tl_news. Wie kann ich z.B. eine art "where pid=2" einfügen?

    muss ich dafür dann options_callback doch nutzen?

  5. #5
    Contao-Nutzer Avatar von benzin
    Registriert seit
    06.02.2016.
    Ort
    Essen/Düsseldorf, NRW
    Beiträge
    84
    Partner-ID
    11060

    Standard

    Zitat Zitat von DerPanda Beitrag anzeigen
    [...] muss ich dafür dann options_callback doch nutzen?
    Genau. Im Options-Callback filtern und die Optionen in der gewünschten Form als Array zurückgeben.

  6. #6
    Contao-Nutzer
    Registriert seit
    18.05.2016.
    Beiträge
    29

    Standard

    Vielen Dank nochmal, klappt alles nun so, wie es sollte

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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