Ergebnis 1 bis 16 von 16

Thema: Pagination im eigenen Modul

  1. #1
    Contao-Nutzer
    Registriert seit
    06.09.2009.
    Beiträge
    73

    Standard Pagination im eigenen Modul

    Hallo,

    ich versuche derzeit die Pagination-Klasse in meinem eigenen Modul einzubauen, was derzeit aber noch nicht funktioniert. Vll weiß hier jemand rat.

    PHP-Code:
    <?php

    class ModuleMixesStart extends ModuleMixes
    {
        protected 
    $strTemplate 'mod_mixesstart';

        protected function 
    compile()
        {
            
    $limit 6;
            
    $arrMixes = array();
            
    $objMixes $this->Database->execute("SELECT * FROM tl_mixes ORDER BY datum");
            
            
    // Pagination
            
    $page $this->Input->get('page') ? $this->Input->get('page') : 1;
            
    $offset = ($page 1) * $limit;

            
    // Get total number of comments
            
    $objTotal $this->Database->prepare("SELECT COUNT(*) AS count FROM tl_mixes")
                                       ->
    execute($this->id);

            
    // Add pagination menu
            
    $objPagination = new Pagination($objTotal->count$limit);
            
    $this->Template->pagination $objPagination->generate("\n  ");
                
            while (
    $objMixes->next())
            {
                
    $arrMixes[] = array
                (
                    
    'name' => $objMixes->name,
                    
    'datum' => $objMixes->datum,
                    
    'img' => $this->getImage($objMixes->img'120'_),
                    
    'id' => $objMixes->id
                
    );
            }

            
    $this->Template->mixes $arrMixes;
        }
    }

    ?>
    Die Werte "$objTotal->count" und "$limit" stimmen mit den gewünschten überein, daran sollte es nicht liegen.

    Viele Grüße

  2. #2
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    Machs so rum :

    PHP-Code:
    $page $this->Input->get('page') ? $this->Input->get('page') : 1;
    $offset = ($page 1) * $limit
    $objMixes $this->Database->execute("SELECT * FROM tl_mixes ORDER BY datum LIMIT ?,?")->execute($offset,$limit); 
    Du musst dich selbst um die richtigen Daten im SQL Query kuemmern. Die Pagination kuemmert sich nur um das Anzeigefeld und die URL.
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  3. #3
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
            $objMixes $this->Database->execute("SELECT *,COUNT(*) AS count FROM tl_mixes ORDER BY datum"); 
    Damit bekommst du dein gesamtes Array, und kannst dann mittels for Schleife durch deine Daten gehen :

    PHP-Code:
    $arrItems =$objMixes->fetchAllAssoc(); 
    for (
    $i=$offset$i<$limit && $i<count($arrItems); $i++) 

    Beide Versionen funktionieren, bei dieser werden ahlt alle Objekte gefetcht, bei der ersten wird nur das geholt was noetig ist, du brauchst aber eine zweite DB Abfrage fuer die Gesamtanzahl.

    Es kommt auf deine Anforderung an.

    Evt. koenntest du beim SQL Query "count(*)" durch ein "count(id)" nehmen, ist dann Ressourcenschonender, da nicht die gesamte Row geladen wird.
    Geändert von lindesbs (14.01.2010 um 22:18 Uhr)
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  4. #4
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    Und wenn Du es noch richtiger haben willst nimmst du folgendes :

    PHP-Code:
    $objMixes $this->Database->execute("SELECT name,datum,img,id, COUNT(id) AS count FROM tl_mixes ORDER BY datum"); 
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  5. #5
    Contao-Nutzer
    Registriert seit
    06.09.2009.
    Beiträge
    73

    Standard

    Vielen Dank für deine Antworten, habe es versucht wie folgt umzusetzen, was jedoch zur folge hatte, dass nur noch ein Eintrag ausgegeben wurde.

    PHP-Code:
    <?php

    class ModuleMixesStart extends ModuleMixes
    {
        protected 
    $strTemplate 'mod_mixesstart';

        protected function 
    compile()
        {
            
    $limit 6;
            
    $arrMixes = array();
            
            
    // Pagination
            
    $page $this->Input->get('page') ? $this->Input->get('page') : 1;
            
    $offset = ($page 1) * $limit;
            
    $objMixes $this->Database->execute("SELECT name,datum,img,id, COUNT(id) AS count FROM tl_mixes ORDER BY datum");

            
    // Get total number of comments

            // Add pagination menu
            
    $objPagination = new Pagination($objTotal->count$limit);
            
    $this->Template->pagination $objPagination->generate("\n  ");
            
            
    $arrItems =$objMixes->fetchAllAssoc();  
            for (
    $i=$offset$i<$limit && $i<count($arrItems); $i++)  {
                
                    
    $arrMixes[] = array
                    (
                        
    'name' => $objMixes->name,
                        
    'datum' => $objMixes->datum,
                        
    'img' => $this->getImage($objMixes->img'89'_),
                        
    'id' => $objMixes->id
                    
    );
            }

            
    $this->Template->mixes $arrMixes;
        }
    }

    ?>

  6. #6
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
     for ($i=$offset$i<($limit+$offset) && $i<count($arrItems); $i++) 
    Sollte die Loesung bringen
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  7. #7
    Contao-Nutzer
    Registriert seit
    06.09.2009.
    Beiträge
    73

    Standard

    Nein, es zeigt immer noch nur noch ein Eintrag an.

    Muss nun eigentlich in die Abfrage ein "LIMIT ".$offset.",".$limit" hinein?

  8. #8
    Contao-Nutzer
    Registriert seit
    06.09.2009.
    Beiträge
    73

    Standard

    Ich hab den Count Befehl in der MySQL Abfrage mal entfernt und ein LIMIT hinzugefügt. Jetzt zeigt es schonmal die neusten 6 an, wie mache ich das nun mit dem Menü?

    Hier der aktuelle Code:
    PHP-Code:
    <?php

    class ModuleMixesStart extends ModuleMixes
    {
        protected 
    $strTemplate 'mod_mixesstart';

        protected function 
    compile()
        {
            
    $limit 6;
            
    $arrMixes = array();
            
            
    // Pagination
            
    $page $this->Input->get('page') ? $this->Input->get('page') : 1;
            
    $offset = ($page 1) * $limit;
            
    $objMixes $this->Database->execute("SELECT name,datum,img,id FROM tl_mixes ORDER BY datum LIMIT ".$offset.",".$limit."");

            
    // Get total number of comments

            // Add pagination menu
            
    $objPagination = new Pagination($objTotal->count$limit);
            
    $this->Template->pagination $objPagination->generate("\n  ");
            
            
    $arrItems =$objMixes->fetchAllAssoc();  
            for (
    $i=$offset$i<($limit+$offset) && $i<count($arrItems); $i++) 
            { 
                
                    
    $arrMixes[] = array
                    (
                        
    'name' => $objMixes->name,
                        
    'datum' => $objMixes->datum,
                        
    'img' => $this->getImage($objMixes->img'89'_),
                        
    'id' => $objMixes->id
                    
    );
            }

            
    $this->Template->mixes $arrMixes;
        }
    }

    ?>

  9. #9
    Contao-Nutzer
    Registriert seit
    06.09.2009.
    Beiträge
    73

    Standard

    Ich habe mich jetzt soweit zu einer "halben" Lösung durchschlagen können, komme nun aber nicht mehr weiter.
    Es zeigt jetzt korrekt viele Resultat pro Seite an, jedoch fehlt von dem der Zahlennavigation jede Spur...
    Weiß hier jemand rat?

    Hier die vorläufige Datei:
    PHP-Code:
    <?php

    class ModuleMixesStart extends ModuleMixes
    {
        protected 
    $strTemplate 'mod_mixesstart';

        protected function 
    compile()
        {
            
    $limit 6;
            
    $arrMixes = array();
            
            
    // Pagination
            
    $page $this->Input->get('page') ? $this->Input->get('page') : 1;
            
    $offset = ($page 1) * $limit;
            
    $objMixes $this->Database->execute("SELECT name,datum,img,id FROM tl_mixes ORDER BY datum LIMIT ".$offset.",".$limit."");

            
    // Get total number of comments

            // Add pagination menu
            
    $objPagination = new Pagination($objTotal->count$limit);
            
    $this->Template->pagination $objPagination->generate("\n  ");
            
            
    $arrItems =$objMixes->fetchAllAssoc();
            for(
    $i=0;$i<count($arrItems);$i++)
            { 
                
                    
    $arrMixes[] = array
                    (
                        
    'name' => $objMixes->name,
                        
    'datum' => $objMixes->datum,
                        
    'img' => $this->getImage($objMixes->img'89'_),
                        
    'id' => $objMixes->id
                    
    );
            }

            
    $this->Template->mixes $arrMixes;
        }
    }

    ?>

  10. #10
    AG CMS-Garden
    Contao-Urgestein
    Avatar von lindesbs
    Registriert seit
    05.06.2009.
    Ort
    Oer-Erkenschwick
    Beiträge
    4.154
    Partner-ID
    keine
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
     $objPagination = new Pagination($objTotal->count$limit); 
    $objTotal gibts nicht mehr, nimm $objMixes

    Damit hast du aber durch dein Limit begrenzte Daten
    von Willi Voltz aus PR 500: Henry George sagte einmal: »Kultur ist Zusammenarbeit.«


    Contao-Hosting: begeisterter Uberspace-Nutzer

  11. #11
    Contao-Nutzer
    Registriert seit
    06.09.2009.
    Beiträge
    73

    Standard

    Blöder Fehler
    Geht jedoch immer noch nicht!

  12. #12
    Contao-Nutzer
    Registriert seit
    06.09.2009.
    Beiträge
    73

    Standard

    Ich habe noch ein bischen herumprobiert, komme aber nicht auf eine Lösung. Weis jemand woran es liegen könnte?

    Vielen Dank im voraus

  13. #13
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    St.Pauli
    Beiträge
    217

    Standard

    Hi,
    vielleicht etwas dumme Frage, aber gibt es in deinem Template denn ein
    PHP-Code:
    <?php echo $this->pagination?>
    ?

    cheers
    Antipitch
    "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." Jamie Zawinski

  14. #14
    Contao-Nutzer
    Registriert seit
    06.09.2009.
    Beiträge
    73

    Standard

    Ja selbst verständlich.
    Ich muss mich zu vorigem noch korrigieren, es funktioniert soweit doch noch nicht. Es listet nur ein Eintrag $limit-mal auf. Also passts noch nicht. Wäre für Lösungen dankbar.

    Viele Grüße

  15. #15
    Contao-Nutzer
    Registriert seit
    06.09.2009.
    Beiträge
    73

    Standard

    Selbst ist der Mann
    Nach langem Experimentieren ist es mir selbst gelungen. Hier nun für alle die evtl ein ähnliches Problem haben meine Lösung:

    PHP-Code:
    <?php

    class ModuleMixesStart extends ModuleMixes
    {
        protected 
    $strTemplate 'mod_mixesstart';

        protected function 
    compile()
        {
            
    $page $this->Input->get('page') ? $this->Input->get('page') : 1;
            
    $limit 4;
            
    $offset = ($page 1) * $limit;

            
    $objMixes $this->Database->execute("SELECT name,datum,img,id, COUNT(id) AS count FROM tl_mixes");

            
    // Add pagination menu
            
    $objPagination = new Pagination($objMixes->count$limit);
            
    $this->Template->pagination $objPagination->generate("\n  ");
            
            if (
    $limit)
            {
                
    $objMixes $this->Database->execute("SELECT * FROM tl_mixes ORDER BY datum DESC LIMIT ".$offset.",".$limit);
            }

            
    $total $objMixes->numRows;
            
    $arrMixes = array();

            if (
    $total 0)
            {
                
    $count 0;

                while (
    $objMixes->next()) 
                { 
                        
    $arrMixes[] = array
                        (
                            
    'name' => $objMixes->name,
                            
    'datum' => $objMixes->datum,
                            
    'img' => $this->getImage($objMixes->img'89'_),
                            
    'id' => $objMixes->id
                        
    );
                }
            }

            
    $this->Template->mixes $arrMixes;
        }
    }

    ?>

  16. #16
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.514
    User beschenken
    Wunschliste

    Standard

    Übrigens, die limit Funktion von TL kennt auch Offset, nur in der Reihenfolge umgekehrt, also "limit, offset".
    Wird offset nicht angegeben, wird automatisch offset=0 gesetzt.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Ordnung im eigenen Modul...
    Von tinoo im Forum Entwickler-Fragen
    Antworten: 2
    Letzter Beitrag: 06.01.2011, 10:53
  2. FE Formular im eigenen Modul nutzen
    Von typo im Forum Entwickler-Fragen
    Antworten: 2
    Letzter Beitrag: 26.09.2010, 15:33
  3. Mehrsprachigkeit in einen eigenen Modul
    Von nicknolte im Forum Entwickler-Fragen
    Antworten: 0
    Letzter Beitrag: 31.07.2010, 16:48
  4. Modul in eigenen Layoutbereich?
    Von makai im Forum Layout / Templates / Holy Grail
    Antworten: 9
    Letzter Beitrag: 27.03.2010, 00:43
  5. DOM PDF im eigenen Modul
    Von Sarvo im Forum Entwickler-Fragen
    Antworten: 3
    Letzter Beitrag: 20.09.2009, 17:18

Lesezeichen

Lesezeichen

Berechtigungen

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