[SOLVED] Pagination mit begrenzter Seitenanzeige

Wie verwendet man Module oder Aktion und passt diese an.

[SOLVED] Pagination mit begrenzter Seitenanzeige

Beitragvon frood » 14. Mai 2011, 16:46

Moin!

Ich möchte, dass eine Pagination, die viele Seiten listet, aus Platzgründen nicht so aussieht:
<<<< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 >>>>

sondern so:
<<<< 1 2 3 ...... 15 >>>>

bzw. so:
<<<< 1 ....... 9 10 11 ...... 15 >>>>

je nach dem, welche Seite gerade offen ist ...
Ich habe solch eine Pagination hier schonmal gesehen, kann Sie allerdings nicht wiederfinden.
Vielleicht hat ja jemand einen heißen Tipp für mich, bevor ich mir dass selbst zusammenfrickeln muss :wink:
Zuletzt geändert von frood am 17. Mai 2011, 07:17, insgesamt 1-mal geändert.
frood
 
Beiträge: 88
Registriert: 7. Okt 2008, 14:17

Re: Pagination mit begrenzter Seitenanzeige

Beitragvon Oliver.Kreischer » 14. Mai 2011, 19:28

Hi,

guck doch mal hier:

http://tympanus.net/codrops/2009/11/17/ ... on-plugin/

Hab's aber selbst noch nirgends eingebaut.

LG
Oliver
http://kreischer.de - "It's very simple - you read the protocol and write the code." - Bill Joy
Benutzeravatar
Oliver.Kreischer
 
Beiträge: 1821
Registriert: 16. Dez 2004, 23:03
Wohnort: Feldafing

Re: Pagination mit begrenzter Seitenanzeige

Beitragvon frood » 15. Mai 2011, 09:48

Hi Oliver,
sieht ja ganz gut aus, ist aber nicht das, was ich suche. Ich wollte auf Javascript verzichten und wüsste auch nicht, wie ich dieses Script dynamisch in redaxo einbinden sollte.

Was ich suche, ist eine Erweiterung des Pagination-scripts, das schon in einigen Modulen verwendet wird:

Code: Alles auswählen
// Pagination
if (!function_exists('generatePaginationNews')) {
   function generatePaginationNews($newsarticles, $newslistpage='0'){
      if('REX_VALUE[9]' > 0){
      $newsitemsperpage = 'REX_VALUE[9]';
      $newsprevtext = "&lt;&lt;&lt;";
      $newsnexttext = "&gt;&gt;&gt;";
      
      $newsitemcount = count($newsarticles);
      $newsoutput = '';
      $newspagecount = ceil($newsitemcount / $newsitemsperpage);
      if($newspagecount > 1){
         if($newslistpage > $newspagecount) $newslistpage = $newspagecount;
        
         $newsprevpagenum = -1;
         $newsnextpagenum = -1;
         if($newslistpage > 0) $newsprevpagenum = $newslistpage-1;
         if($newslistpage < ($newspagecount-1)) $newsnextpagenum = $newslistpage+1;
                   
         $newsoutput = '<div id="pagination">';
         if($newsprevpagenum >= 0) $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newsprevpagenum.'">'.$newsprevtext.'</a>';
         for($newspagenum = 0; $newspagenum < $newspagecount; $newspagenum++){
            if($newspagenum == $newslistpage){
               $newsoutput .= '<div class="current">'.($newspagenum+1).'</div>';
            }
            else{
               $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newspagenum.'">'.($newspagenum+1).'</a>';
            }
         }
         if($newsnextpagenum > 0) $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newsnextpagenum.'">'.$newsnexttext.'</a>';
         $newsoutput .= '</div>';
      }
      return $newsoutput;
   
      }
      else{
         return "";
      }
   }
}


Gruss
Marc
frood
 
Beiträge: 88
Registriert: 7. Okt 2008, 14:17

Re: Pagination mit begrenzter Seitenanzeige

Beitragvon Oliver.Kreischer » 15. Mai 2011, 20:24

Hi Marc,

da ich so etwas noch nie gebraucht habe bleibt mir auch nur Google.

Guck doch mal hier:

http://www.codediesel.com/php/simple-pagination-in-php/
http://papermashup.com/easy-php-pagination/


Vielleicht kannst Du davon etwas in das bestehende Script übernehmen oder umgekehrt :-)

LG
Oliver
http://kreischer.de - "It's very simple - you read the protocol and write the code." - Bill Joy
Benutzeravatar
Oliver.Kreischer
 
Beiträge: 1821
Registriert: 16. Dez 2004, 23:03
Wohnort: Feldafing

Re: Pagination mit begrenzter Seitenanzeige

Beitragvon frood » 16. Mai 2011, 15:35

Hallo Oliver,
nochmal vielen Dank für die Hilfe, ich habe deine Links als Anregung genommen, um das Script selbst zu modifizieren. Und falls mal wieder so ein PHP-Spacken wie ich daherkommt und sich für die Lösung interessiert, habe ich den Code ausführlich kommentiert. Hier das getestete und für gut befundene Ergebnis:

Code: Alles auswählen
   function generatePaginationNews($newsarticles, $newslistpage='0'){
      if('REX_VALUE[9]' > 0){
      $newsitemsperpage = 'REX_VALUE[9]';
      $newsprevtext = "&lt;&lt;&lt;";
      $newsnexttext = "&gt;&gt;&gt;";
      // Anzahl Seiten gesamt
      $newsitemcount = count($newsarticles);   
      // max. Anzahl Pagination-links
      $linklimit = 7;
      // Anzahl Pagination-Links
      $newspagecount = ceil($newsitemcount / $newsitemsperpage);
      $newsoutput = '';
      if($newspagecount > 1){
         if($newslistpage > $newspagecount) $newslistpage = $newspagecount;
        
         $newsprevpagenum = -1;
         $newsnextpagenum = -1;
         if($newslistpage > 0) $newsprevpagenum = $newslistpage-1;
         if($newslistpage < ($newspagecount-1)) $newsnextpagenum = $newslistpage+1;
                      
         $newsoutput = '<div id="pagination">';
        
         // Blättern links
         if($newsprevpagenum >= 0) $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newsprevpagenum.'">'.$newsprevtext.'</a>';
      
        // wenn weniger Pagination-Links als Limit, alle anzeigen
        if($newspagecount<=$linklimit){         
           for($newspagenum = 0; $newspagenum < $newspagecount; $newspagenum++){
               if($newspagenum == $newslistpage){
                  $newsoutput .= '<div class="current">'.($newspagenum+1).'</div>';
               }
               else{
                  $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newspagenum.'">'.($newspagenum+1).'</a>';
               }
            }        
        }else{             
        // wenn mehr Pagination-Links als Limit   
         // wenn aktuelle Position <= 5
         if($newslistpage < 5 ){         
           // ersten 6 anzeigen ...
           for($newspagenum = 0; $newspagenum < 6; $newspagenum++){
               if($newspagenum == $newslistpage){
                  $newsoutput .= '<div class="current">'.($newspagenum+1).'</div>';
               }
               else{
                  $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newspagenum.'">'.($newspagenum+1).'</a>';
               }
            }   
            // Punkte dazwischen ...
            $newsoutput .= '<div class="punkte"> ... </div>';           
            // ... und den letzten anzeigen
           $newspagenum = $newspagecount-1;
               if($newspagenum == $newslistpage){
                  $newsoutput .= '<div class="current">'.($newspagenum+1).'</div>';
               }
               else{
                  $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newspagenum.'">'.($newspagenum+1).'</a>';
               }                                    
           }else{
         // wenn aktuelle Position > 5
         if($newslistpage >= 5 ){
           //erste Stelle anzeigen ....
           $newspagenum = 0;
               if($newspagenum == $newslistpage){
                  $newsoutput .= '<div class="current">'.($newspagenum+1).'</div>';
               }
               else{
                  $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newspagenum.'">'.($newspagenum+1).'</a>';
               }
            // ... und Punkte anzeigen ...
            $newsoutput .= '<div class="punkte"> ... </div>';                     
            // wenn aktuelle Position nah am Ende ...
            if($newspagecount-$newslistpage<5){
               // ... hinteren 5 anzeigen
                 for($newspagenum = $newspagecount-5; $newspagenum < $newspagecount; $newspagenum++){
                    if($newspagenum == $newslistpage){
                        $newsoutput .= '<div class="current">'.($newspagenum+1).'</div>';
                     }
                     else{
                        $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newspagenum.'">'.($newspagenum+1).'</a>';
                     }
                  }                                                 
            }else{   
            // ... ansonsten nur den aktuellen +/-1, dann Punkte und den letzten anzeigen
               for($newspagenum = $newslistpage-1; $newspagenum < $newslistpage+2; $newspagenum++){
                   if($newspagenum == $newslistpage){
                      $newsoutput .= '<div class="current">'.($newspagenum+1).'</div>';
                   }
                   else{
                      $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newspagenum.'">'.($newspagenum+1).'</a>';
                   }
                }         
                 // ... Punkte anzeigen ...
                 $newsoutput .= '<div class="punkte"> ... </div>';
                // ... und den letzten anzeigen
                 $newspagenum = $newspagecount-1;
                     if($newspagenum == $newslistpage){
                        $newsoutput .= '<div class="current">'.($newspagenum+1).'</div>';
                     }
                     else{
                        $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newspagenum.'">'.($newspagenum+1).'</a>';
                     }
              }
         }                             
        }               
      }

      // Blättern rechts
      if($newsnextpagenum > 0) $newsoutput .= '<a href="'.rex_getUrl(REX_ARTICLE_ID).'&newslistpage='.$newsnextpagenum.'">'.$newsnexttext.'</a>';
      $newsoutput .= '</div>';
        
      return $newsoutput;   
      }
      else{
         return "";
      }
   }
}


Verwendet auf http://www.schleidoerferschule.de
REDAXO RULES ! :mrgreen:

Gruss
Marc
frood
 
Beiträge: 88
Registriert: 7. Okt 2008, 14:17

Re: Pagination mit begrenzter Seitenanzeige

Beitragvon Oliver.Kreischer » 16. Mai 2011, 15:52

Hi Marc,

das ist doch mal cool. Viellecih stellst du das ganze News Modul mit der Paginierung in den Downloadbereich? Oder nur die Paginierung?

LG
Oliver
http://kreischer.de - "It's very simple - you read the protocol and write the code." - Bill Joy
Benutzeravatar
Oliver.Kreischer
 
Beiträge: 1821
Registriert: 16. Dez 2004, 23:03
Wohnort: Feldafing

Re: Pagination mit begrenzter Seitenanzeige

Beitragvon frood » 16. Mai 2011, 16:40

... das komplette News-Modul ist zu speziell für den Downloadbereich, da es nur Artikel listet, die mit einem anderen, eigenen Modul erstellt wurden, welches wiederum mit der structure.inc.php verwoben ist.
Klingt kompliziert? Funktioniert aber wunderbar! :wink:

Und die pagination-Funktion ist, denke ich, hier im Forum besser aufgehoben, weil sie allein ja kein komplettes Modul darstellt. Ist ja auch über die Forum-Suche gut zu finden .... oder was meinst Du ?
frood
 
Beiträge: 88
Registriert: 7. Okt 2008, 14:17

Re: Pagination mit begrenzter Seitenanzeige

Beitragvon Oliver.Kreischer » 16. Mai 2011, 20:29

Auch wahr :-)
Dann schreib doch am besten noch kurz [SOLVED] im ersten Beitrag vor den Titel.

LG
Oliver
http://kreischer.de - "It's very simple - you read the protocol and write the code." - Bill Joy
Benutzeravatar
Oliver.Kreischer
 
Beiträge: 1821
Registriert: 16. Dez 2004, 23:03
Wohnort: Feldafing

Re: Pagination mit begrenzter Seitenanzeige

Beitragvon frood » 17. Mai 2011, 07:19

Oliver.Kreischer hat geschrieben:Dann schreib doch am besten noch kurz [SOLVED] im ersten Beitrag vor den Titel.


Erledigt!
frood
 
Beiträge: 88
Registriert: 7. Okt 2008, 14:17


Zurück zu Module/Aktionen [R4]

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast