Ergebnis 1 bis 11 von 11

Thema: Reihenfolge Newsletter im Modul Persönliche Daten

  1. #1
    Alter Contao-Hase
    Registriert seit
    06.07.2009.
    Beiträge
    1.493

    Standard Reihenfolge Newsletter im Modul Persönliche Daten

    Ich habe 7 Newsletter die die nutzer via dem Modul Persönliche Daten bestellen und abbestellen können.

    Leider wird die Reihenfolge im Modul nicht nach dem Alphabet oder nach der ID vorgenommen. Nun Frage ich mich... welche Sortierung erfolgt überhaupt?

  2. #2
    Alter Contao-Hase
    Registriert seit
    06.07.2009.
    Beiträge
    1.493

    Standard

    Ich habe mal ein Bild angehangen... und auch die IDs dahinter geschrieben... Ich hätte gerne eine Alphabetische Sortierung... Sprich "AKTUELL" zu erst....Könnt ihr mir helfen?
    Angehängte Grafiken Angehängte Grafiken

  3. #3
    Alter Contao-Hase
    Registriert seit
    06.07.2009.
    Beiträge
    1.493

    Standard

    In der ONline Demo von Contao ist es soweit ich testen konnte zumindestens nach der ID

  4. #4
    Alter Contao-Hase
    Registriert seit
    06.07.2009.
    Beiträge
    1.493

    Standard

    PHP-Code:

    // HOOK: add newsletter fields
            
    if (in_array('newsletter'$this->Config->getActiveModules()))
            {
                
    $this->Template->newsletter $arrFields['newsletter'];
                
    $this->Template->newsletterDetails $GLOBALS['TL_LANG']['tl_member']['newsletterDetails'];
            } 
    Ich denke hier müsste ich doch dann ansetzen oder?

  5. #5
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi,

    es hat nichts mit der ID oder sonstiger Sortierung zu tun.
    Ein Blick in den Quellcode verrät, dass die Newsletter(-liste) so geladen wird, wie sie aus der DB kommt.

    Schau mal in der Datenbank welche Reihenfolge tl_newsletter_channel hat. Müsste 1:1 übereinstimmen.


    Um die Reihenfolge zu ändern müsstest du ggf. ein Ticket auf Github öffnen oder die Newsletter Klasse (=> Methode getNewsletters) überschreiben
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  6. #6
    Alter Contao-Hase
    Registriert seit
    06.07.2009.
    Beiträge
    1.493

    Standard

    Hallo danke für die Info... in der Tat wird es nach der DB sortiert.

    Nur verstehe ich die Sortierung in der Datenbank nicht.

    Es wird ja eine ID und ein Tstamp vergeben... doch wo nach sortiert die Datenbank dann die Einträge????

  7. #7
    Alter Contao-Hase
    Registriert seit
    06.07.2009.
    Beiträge
    1.493

    Standard

    Ich habe mal ein Ticket aufgemacht:

    https://github.com/contao/core/issues/7864

    Hat jemand von euch eine entsprechende Anpassung im Einsatz oder könnte mir ein passendes Beispiel bennen?

    Bis jetzt habe ich noch keine Idee wo und wie ich eingreifen müsste, um eine Alphabetische Sortierung zu generieren.

  8. #8
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi,

    ich weiß zwar nicht wen du mit "euch" meinst..... ich glaub wir sind hier alleine ;-)

    Also, hier eine quick&dirty Lösung die NICHT Updatesicher ist, aber vielleicht wird das Ticket ja relativ schnell geschlossen und der Fehler damit behoben.

    Also, ändere folgendes ab, damit du deine Sortierung entsprechend bekommst

    Öffne die Datei /system/modules/newsletter/classes/Newsletter.php

    Zeile 830

    PHP-Code:
    public function getNewsletters($objModule)
    {
           
    $objNewsletter = \NewsletterChannelModel::findAll();

           if (
    $objNewsletter === null)
           {
                  return array();
           }

           
    $arrNewsletters = array();

           
    // Return all channels if $objModule is null (see #5874)
           
    if ($objModule === null || TL_MODE == 'BE')
           {
                  while (
    $objNewsletter->next())
                  {
                         
    $arrNewsletters[$objNewsletter->id] = $objNewsletter->title;
                  }
           }
           else
           {
                  
    $newsletters deserialize($objModule->newsletterstrue);

                  if (!
    is_array($newsletters) || empty($newsletters))
                  {
                         return array();
                  }

                  while (
    $objNewsletter->next())
                  {
                         if (
    in_array($objNewsletter->id$newsletters))
                         {
                                
    $arrNewsletters[$objNewsletter->id] = $objNewsletter->title;
                         }
                  }
           }

           return 
    $arrNewsletters;

    GANZ unten das return $arrNewsletters änderst du ab in

    PHP-Code:
    return sort($arrNewsletters); 
    Damit müsste, wenn ich mich nicht irre, die Liste alphabetisch zurückgegeben werden.

    Test it! Bin gespannt!
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  9. #9
    Alter Contao-Hase
    Registriert seit
    06.07.2009.
    Beiträge
    1.493

    Standard

    Auf meiner alten Contao Version werden dann im Frotend Modul Persönliche Daten... einfach keine Newsletter mehr angezeigt.

    Habe gerade keine 3.xx er da... aber der Aufbau


    PHP-Code:
        public function getNewsletters($objModule)
        {
            
    $objNewsletter $this->Database->execute("SELECT id, title FROM tl_newsletter_channel");

            if (
    $objNewsletter->numRows 1)
            {
                return array();
            }

            
    $arrNewsletters = array();

            
    // Back end
            
    if (TL_MODE == 'BE')
            {
                while (
    $objNewsletter->next())
                {
                    
    $arrNewsletters[$objNewsletter->id] = $objNewsletter->title;
                }

                return 
    $arrNewsletters;
            }

            
    // Front end
            
    $newsletters deserialize($objModule->newsletterstrue);

            if (!
    is_array($newsletters) || count($newsletters) < 1)
            {
                return array();
            }

            while (
    $objNewsletter->next())
            {
                if (
    in_array($objNewsletter->id$newsletters))
                {
                    
    $arrNewsletters[$objNewsletter->id] = $objNewsletter->title;
                }
            }

            return 
    $arrNewsletters ;
        } 

  10. #10
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Na dann ändere doch da einfach die Datenbankabfrage.....


    PHP-Code:
    $objNewsletter $this->Database->execute("SELECT id, title FROM tl_newsletter_channel ORDER BY title"); 
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  11. #11
    Alter Contao-Hase
    Registriert seit
    06.07.2009.
    Beiträge
    1.493

    Standard

    Oh man ... das war so einfach... das es schon wieder peinlich war das überhaupt nicht kapiert zu haben ...

    großes DANKESCHÖN!

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
  •