AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] Pagination "berechnen"

Ein Thema von Matze · begonnen am 7. Mai 2006 · letzter Beitrag vom 8. Mai 2006
 
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[PHP] Pagination "berechnen"

  Alt 7. Mai 2006, 22:37
Moin Moin

Ich versuche gerade verzweifelt eine Pagination (also so Seitenzahlen) einzurichten, doch vergebens. Mein Problem it, dass ich nicht alle Seitenzahlen anzeigen lassen kann, da in der Datenbank hunderte Einträge enthalten sein können (protokollierte auftretende Fehler, das kann also, wenn man im Admin-Panel nicht ständig nach den neuen Fehlern guckt, eine ganz schön große Tabelle geben *g*).

Nun möchte ich es so haben, dass man etwas erhält wie folgend beschrieben (Die eckigen Klammern symbolisieren die aktuelle Seite).

4 Seiten:
1, 2, [3], 4

mehr als 7 Seiten:
1, 2, ..., 5, [6], 7
1, [2], 3, ..., 8, 9
1, 2, ..., 8, [9], 10, ..., 13, 14

Was ich verdeutlichen möchte ist, dass es zig Kombinationen gibt, die '...' anzuordnen und nicht weiß, wie ich diese berechnen soll. Ich dachte an diese "Regel" (bei mehr als 7 Seiten), dass generell die ersten beiden Seitenzahlen (1, 2) und die letzten beiden angezeigt werden. Des weiteren sollte die Seitenahl je vor und nach der aktuellen sichtbar sein.

Den phpBB-Code habe ich auch schon angesehen, doch verstehe ich nicht so ganz.

Versucht habe ich es so in der Art, doch da müsste ich ja sehr viele Fälle überprüfen, was keine schöne Lösung ist:

Code:
[color=#FFA800]/**
* generates a pagination
*/[/color]
[color=#2E7917]function[/color] [color=#180F94]generate_pagination[/color]([color=#180F94]$current_page[/color], [color=#180F94]$entry_count[/color],
   [color=#180F94]$item_count_per_page[/color], [color=#180F94]$url_without_pagenum[/color])
{
   [color=#2E7917]global[/color] [color=#180F94]$template[/color];
   [color=#2E7917]global[/color] [color=#180F94]$lang[/color];

   [color=#180F94]$page_count[/color] = [color=#180F94]ceil[/color]([color=#180F94]$entry_count[/color] / [color=#180F94]$item_count_per_page[/color]);

   [color=#FFA800]// generates the pagination array[/color]
   [color=#2E7917]if[/color] ([color=#180F94]$page_count[/color] > 5 && [color=#180F94]$current_page[/color] != 1 && [color=#180F94]$current_page[/color] != 2
      && [color=#180F94]$current_page[/color] != 3 && [color=#180F94]$current_page[/color] != [color=#180F94]$page_count[/color] - 1
      && [color=#180F94]$current_page[/color] != [color=#180F94]$pagecount[/color] && [color=#180F94]$current_page[/color] != [color=#180F94]$page_count[/color] - 2)
   {
      [color=#180F94]$arr_pagination[/color] = [color=#2E7917]array[/color](1, 2, [color=#E40808]'...'[/color], [color=#180F94]$current_page[/color], [color=#E40808]'...'[/color],
         [color=#180F94]$page_count[/color] - 1, [color=#180F94]$page_count[/color]);
   }
   [color=#2E7917]else if[/color] ([color=#180F94]$page_count[/color] > 5 && [color=#180F94]$current_page[/color] == 3)
   {
      [color=#180F94]$arr_pagination[/color] = [color=#2E7917]array[/color](1, 2, 3, [color=#E40808]'...'[/color], [color=#180F94]$page_count[/color] - 1,
         [color=#180F94]$page_count[/color]);
   }
   [color=#2E7917]else[/color]
   {
      [color=#180F94]$arr_pagination[/color] = [color=#2E7917]array[/color]();
      [color=#2E7917]for[/color] ([color=#180F94]$i[/color] = 1; [color=#180F94]$i[/color] < [color=#180F94]$page_count[/color]; [color=#180F94]$i++[/color])
      {
         [color=#180F94]$arr_pagination[/color][] = [color=#180F94]$i[/color];
      }
   }

   [color=#FFA800]// generates the output[/color]
   [color=#2E7917]foreach[/color] ([color=#180F94]$arr_pagination as $page_num[/color])
   {
      [color=#180F94]$template[/color]->[color=#180F94]set_block[/color]([color=#E40808]'pagination'[/color]);

      [color=#FFA800]// only link page numbers and not '...'[/color]
      [color=#2E7917]if[/color] ([color=#180F94]$page_num[/color] != [color=#E40808]'...'[/color] && [color=#180F94]$page_num[/color] != [color=#180F94]$current_page[/color])
      {
         [color=#180F94]$page_num_link[/color] = [color=#180F94]$url_without_pagenum[/color] . [color=#E40808]'&amp;pagenum='[/color] .
            [color=#180F94]$page_num[/color];

         [color=#180F94]$template[/color]->[color=#180F94]set_block[/color]([color=#E40808]'pagination.switch_link'[/color], [color=#2E7917]array[/color](
            [color=#E40808]'PAGE_NUM'[/color] => [color=#180F94]$page_num[/color],
            [color=#E40808]'U_PAGE_NUM'[/color] => [color=#180F94]$page_num_link[/color]
            )
         );
      }
      [color=#2E7917]else[/color]
      {
         [color=#2E7917]if[/color] ([color=#180F94]$page_num[/color] == [color=#180F94]$current_page[/color])
         {
            [color=#180F94]$css_page_num[/color] = [color=#E40808]' underline'[/color];
         }
         [color=#2E7917]else[/color]
         {
            [color=#180F94]$css_page_num[/color] = [color=#E40808]''[/color];
         }

         [color=#180F94]$template[/color]->[color=#180F94]set_block[/color]([color=#E40808]'pagination.switch_no_link'[/color], [color=#2E7917]array[/color](
            [color=#E40808]'PAGE_NUM'[/color] => [color=#180F94]$page_num[/color],
            [color=#E40808]'CSS_PAGE_NUM'[/color] => [color=#180F94]$css_page_num[/color]
            )
         );
      }
   }

   [color=#180F94]$page_status[/color] = [color=#180F94]sprintf[/color]([color=#180F94]$lang[/color][[color=#E40808]'pagination_status'[/color]], [color=#180F94]$current_page[/color],
      [color=#180F94]$page_count[/color]);

   [color=#180F94]$template[/color]->[color=#180F94]set_var[/color]([color=#E40808]'PAGE_STATUS'[/color], [color=#180F94]$page_status[/color]);
   [color=#180F94]$template[/color]->[color=#180F94]add_filename[/color]([color=#E40808]'PAGINATION'[/color], [color=#E40808]'pagination.tpl'[/color]);

   [color=#2E7917]return true[/color];      
}

Ich hoffe, ich habe das nicht um sonst so gehighlighted *hechel* ^^


Edits: Highlight-Fehler korrigiert
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz