Daten mit PHP paginieren

Ich erinnere mich an die Zeit vor Jahren, als ich zum ersten Mal in PHP und MySQL programmiert habe, wie aufgeregt ich war, als ich zum ersten Mal Informationen aus einer Datenbank bekam, die in einem Webbrowser angezeigt wurden. 

Für jemanden, der über wenig Datenbank- und Programmierkenntnisse verfügte, wurde die Anzeige dieser Tabellenzeilen basierend auf dem von mir geschriebenen Code auf dem Bildschirm angezeigt (okay, ich habe ein Beispiel aus einem Buch kopiert - lassen Sie uns die Haare nicht spalten) - ein triumphaler Höhepunkt. Ich habe die Magie, die damals gearbeitet hat, vielleicht noch nicht vollständig verstanden, aber der erste Erfolg hat mich zu größeren und besseren Projekten inspiriert.

Während mein Überschwang über Datenbanken möglicherweise nicht mehr so ​​ist wie früher,
Seit meiner ersten Begegnung mit PHP und MySQL bin ich begeistert
die Fähigkeit, Dinge einfach und benutzerfreundlich zu gestalten. 

Als Entwickler ist ein Problem, mit dem ich ständig konfrontiert bin, es, eine große Menge von Informationen zu erfassen und die Verdaulichkeit zu erleichtern. Unabhängig davon, ob es sich um eine große Kundenliste oder um einen persönlichen MP3-Katalog handelt, kann es entmutigend sein, Reihen für Reihen auf Reihen von Daten zu sitzen
und frustrierend. Was kann ein guter Entwickler tun? Paginieren!

Suchen Sie nach einer schnellen Lösung?

Wenn Sie nach einer schnellen Lösung suchen, finden Sie im Envato Market eine große Sammlung von Paginierungsskripten und Helfern. 

Diese PHP-Paginierungsklasse ist wirklich nützlich. Es kann mit jeder PHP-unterstützten Datenbank-Engine implementiert werden, ist sehr einfach anzupassen und zu implementieren, unterstützt standardmäßig zwei Anzeigen, verfügt über mehrfarbige Design-Schemata und mehr.


1. Paginierung

Paginierung ist im Wesentlichen der Prozess des Erfassens von Ergebnissen und der Verbreitung
Sie werden über die Seiten hinausgeführt, um sie übersichtlicher zu gestalten.

Mir wurde früh klar, dass ich nicht nur 5000 Informationszeilen anzeigen würde
Wäre es Kopfschmerzen für jemanden, der es versuchen und lesen sollte, aber die meisten Browser würden dies hinnehmen
eine Internet-Ewigkeit (d. h. mehr als etwa fünf Sekunden), um sie anzuzeigen. 

Um dies zu lösen, würde ich verschiedene SQL-Anweisungen codieren, um Datenblöcke herauszuziehen, und wenn ich es wäre
In einer guten Stimmung kann ich sogar ein paar "nächste" und "vorherige" Tasten einwerfen.
Nach einer Weile muss dieser Code in jedes ähnliche Projekt eingefügt und angepasst werden
es wurde alt geworden. Schnell. Und wie jeder gute Entwickler weiß, bringt Faulheit Erfindergeist
oder sowas ähnliches. Also setzte ich mich eines Tages zusammen und beschloss, mir ein einfaches vorzustellen,
flexible und einfach zu verwendende PHP-Klasse, für die automatisch die Drecksarbeit erledigt würde
mir.

Ein kurzes Wort über mich und PHP-Klassen. Ich bin kein objektorientierter Fan. In der Tat ich kaum
Verwenden Sie immer das Zeug. Aber nachdem Sie einige OOP-Beispiele und Tutorials gelesen haben, und einige
An einfachen Versuchs- und Irrtumsbeispielen habe ich mich entschieden, es zu drehen, und Sie wissen was?
Es funktioniert perfekt für die Paginierung. Der hier verwendete Code ist in PHP 4 geschrieben
Arbeit in PHP 5.


2. Die Datenbank

Muss MySQL lieben. Keine Beleidigung der anderen Datenbanksysteme da draußen, aber dafür
Ich brauche nur MySQL. Und eine großartige Funktion von MySQL ist, dass sie Ihnen einige geben
Kostenlose Beispieldatenbanken zum Spielen unter http://dev.mysql.com/doc/#sampledb.

Für meine Beispiele verwende ich die Weltdatenbank (~ 90k gezippt), die über enthält
4000 Datensätze zum Spielen, aber das Schöne an dem PHP-Skript, das wir erstellen werden, ist
dass es mit jeder Datenbank verwendet werden kann. Jetzt können wir uns alle einig sein, wenn wir uns entschieden haben
Um unsere Ergebnisse nicht zu paginieren, würde dies zu sehr langen und unhandlichen Ergebnissen führen
Ergebnisse wie folgt:

(Klicken Sie für volle Größe, lächerlich langes Bild ~ 338k)

Also lassen Sie uns unsere Daten in einfach zu verdauliche Bisse wie folgt zerlegen:

Schön ist es nicht? Sobald Sie die Paginierungsklasse in Ihren Code fallen lassen, können Sie dies tun
Verwandeln Sie schnell und einfach einen großen Datensatz in einfach zu navigierende Seiten
Nur ein paar Zeilen Code. Ja wirklich.


3. Paginator

Dieses Beispiel besteht aus zwei Skripts, der wiederverwendbaren Paginator-Klasse und der Indexdatei, die die Tabellenelemente und Steuerelemente anzeigt.

Paginator.class.php

Die Paginator-Klasse hat nur zwei Methoden und den Konstruktor. Wir werden ihn schrittweise aufbauen und jeden Schritt im weiteren Verlauf erklären.

 

Diese Definition legt nur die für das Paginator erforderlichen Member-Variablen fest, da dies eine Hilfsklasse ist, die nur für die Paginierung bestimmt ist. Sie setzt nur eine gültige Verbindung zum MySQL-Server und eine bereits definierte Abfrage voraus, mit der wir die für das Paginieren der Ergebnisse erforderlichen Parameter anhängen. Wir beginnen mit der Konstruktormethode.

_conn = $ conn; $ this -> _ query = $ query; $ rs = $ this -> _ conn-> query ($ this -> _ query); $ this -> _ total = $ r-> num_rows;  

Ganz einfach richtig? Diese Methode legt nur die Datenbankverbindung des Objekts und die erforderliche Abfrage fest. Anschließend berechnet sie die Gesamtzahl der von dieser Abfrage abgerufenen Zeilen ohne Einschränkung oder ohne Parameter. Diese Summe ist erforderlich, um die Verknüpfungen für den Paginator zu erstellen.

Beachten Sie, dass der Einfachheit halber keine Fehlerprüfung oder andere Überprüfung der angegebenen Parameter durchgeführt wird. In einer realen Anwendung sind diese Prüfungen jedoch erforderlich.

Ergebnisse abrufen

Lassen Sie uns nun die Methode erstellen, die die Daten tatsächlich paginiert und die Ergebnisse zurückgibt.

_limit = $ limit; $ this -> _ page = $ page; if ($ this -> _ limit == 'all') $ query = $ this -> _ query;  else $ query = $ this -> _-Abfrage. " GRENZE " . (($ this -> _ page - 1) * $ this -> _ limit). ", $ this -> _ limit";  $ rs = $ this -> _ conn-> query ($ query); while ($ row = $ rs-> fetch_assoc ()) $ results [] = $ row;  $ result = new stdClass (); $ result-> page = $ this -> _ page; $ result-> limit = $ this -> _ limit; $ result-> total = $ this -> _ total; $ result-> data = $ results; $ Ergebnis zurückgeben;  

Lassen Sie uns diesen Schritt für Schritt analysieren. Zuerst legen Sie die Grenz- und Seitenparameter fest, die standardmäßig auf 10 und 1 eingestellt sind. Dann prüfen wir, ob der Benutzer eine bestimmte Anzahl von Zeilen oder alle Zeilen benötigt, basierend auf diesem und dem Seitenparameter, den wir festlegen GRENZE Als Parameter der Abfrage berücksichtigt die "- 1" der Seite die Tatsache, dass wir die Seiten in 1 anstelle von 0 beginnen.

Danach werten wir einfach die Abfrage aus und erhalten die Ergebnisse. Schließlich erstellen wir ein neues Ergebnisobjekt, das die Grenzwert-, Seiten- und Gesamtparameter der ausgeführten Abfrage sowie die Daten für jede der abgerufenen Zeilen enthält.

Paginierungs-Links anzeigen

Nun schreiben wir die Methode, mit der die Paginierungslinks abgerufen werden.

_limit == 'all') return "; $ last = ceil ($ this -> _ total / $ this -> _ limit); $ start = (($ this -> _ page - $ links)> 0)? $ this -> _ page - $ links: 1; $ end = (($ this -> _ page + $ links) < $last ) ? $this->_page + $ links: $ last; $ html = '
    '; $ class = ($ this -> _ page == 1)? "deaktiviert" : ""; $ html. = '
  • _Grenze . '& page ='. ($ this -> _ page - 1). '">«
  • '; if ($ start> 1) $ html. = '
  • _Grenze . '& page = 1 "> 1
  • '; $ html. = '
  • '; für ($ i = $ start; $ i <= $end; $i++ ) $class = ( $this->_page == $ i)? "aktiv": ""; $ html. = '
  • _Grenze . '& page ='. $ i. ""> ". $ i."
  • '; if ($ end < $last ) $html .= '
  • '; $ html. = '
  • _Grenze . '& page ='. $ last. ""> ". $ last."
  • '; $ class = ($ this -> _ page == $ last)? "deaktiviert" : ""; $ html. = '
  • _Grenze . '& page ='. ($ this -> _ page + 1). ""> »
  • '; $ html. = '
'; return $ html;

Dies ist eine ziemlich lange Methode, die ungefähr 34 Zeilen Code umfasst. Lassen Sie uns nun erklären, was in dieser Methode vor sich geht.

  1. Zuerst prüfen wir, ob der Benutzer eine bestimmte Anzahl von Links oder alle Links benötigt. Im zweiten Fall geben wir einfach eine leere Zeichenfolge zurück, da keine Paginierung erforderlich ist.
  2. Danach berechnen wir die letzte Seite basierend auf der Gesamtzahl der verfügbaren Zeilen und den erforderlichen Elementen pro Seite.
  3. Dann nehmen wir den Links-Parameter, der die Anzahl der Links darstellt, die unterhalb und oberhalb der aktuellen Seite angezeigt werden sollen, und berechnen den Start- und End-Link zum Erstellen.
  4. Jetzt erstellen wir das Anfangs-Tag für die Liste und legen die Klasse davon mit dem List-Klassenparameter fest. Fügen Sie den Link "vorherige Seite" hinzu. Beachten Sie, dass wir für diesen Link prüfen, ob die aktuelle Seite die erste ist, und wenn ja, setzen wir die deaktivierte Eigenschaft des Links.
  5. An dieser Stelle zeigen wir einen Link zur ersten Seite und ein Ellipsen-Symbol für den Fall, dass der Start-Link nicht der erste ist.
  6. Als nächstes fügen wir die Links unter und über der aktuellen Seite basierend auf den zuvor berechneten Start- und Endparametern hinzu. In jedem Schritt werten wir die aktuelle Seite erneut aus, um die angezeigte Link-Seite anzuzeigen und setzen die aktive Klasse entsprechend.
  7. Danach zeigen wir ein weiteres Ellipsen-Symbol und den Link zur letzten Seite an, falls der End-Link nicht der letzte ist.
  8. Schließlich zeigen wir den Link "nächste Seite" an und setzen den deaktivierten Status, wenn der Benutzer die letzte Seite anzeigt, schließen die Liste und geben den generierten HTML-String zurück.

Das ist alles, was die Paginator.class bietet. Natürlich können wir Setter und Getter für Datenbankverbindung, Limit, Seite, Abfrage und Gesamtparameter hinzufügen, aber der Einfachheit halber behalten wir es bei.

4. Index.php

Jetzt erstellen wir die Datei, die für die Verwendung der Paginator-Klasse und die Anzeige der Daten zuständig ist. Lassen Sie mich zuerst den Basis-HTML-Code anzeigen.

  PHP Pagination    

PHP Pagination

Stadt Land Kontinent Region

Diese Datei zeigt ganz einfach nur eine Tabelle an, die mit den aus der Datenbank abgerufenen Informationen gefüllt wird. In diesem Beispiel verwende ich Bootstrap für das grundlegende Seiten-Styling.

Verwenden des Paginators

Daten ); $ i ++):?>  Daten [$ i] ['Name']; ?> Daten [$ i] ['Land']; ?> Daten [$ i] ['Kontinent']; ?> Daten [$ i] ['Region']; ?>   

Um unsere Paginator-Klasse zu verwenden, fügen Sie den folgenden PHP-Code oben im Dokument ein.

getData ($ page, $ limit); ?>

Dieses Skript ist ziemlich einfach, wir haben nur unsere Paginator-Klasse benötigt. Beachten Sie, dass dieser Code davon ausgeht, dass sich diese Datei im selben Verzeichnis wie die index.php Datei, wenn dies nicht der Fall ist, sollten Sie den Pfad entsprechend aktualisieren.

Dann stellen wir die Verbindung zu unserer Datenbank mithilfe der MySQLi-Bibliothek her, rufen die Paginator-Parameter aus der GET-Anforderung ab und stellen die Abfrage ein, da dies kein Artikel in MySQL ist oder ich keine Details zu der Verbindung oder der Abfrage bekomme hier verwendet.

Zuletzt erstellen wir das Paginator-Objekt und rufen die Ergebnisse für die aktuelle Seite ab.

Anzeige der Ergebnisse

Um nun die erhaltenen Ergebnisse anzuzeigen, fügen Sie dem Tabellenkörper den folgenden Code hinzu.

Daten ); $ i ++):?>  Daten [$ i] ['Name']; ?> Daten [$ i] ['Land']; ?> Daten [$ i] ['Kontinent']; ?> Daten [$ i] ['Region']; ?>   

Hier durchlaufen wir einfach das Ergebnisdatenattribut, das die Datensätze der Städte enthält, und erstellen für jeden von ihnen eine Tabellenzeile.

Paginierungs-Links

Um nun die Paginator-Links anzuzeigen, fügen Sie den folgenden Code unterhalb der Tabelle ein.

createLinks ($ links, 'pagination pagination-sm'); ?> 

An die Paginator-Methode createLinks übergeben wir das erhaltene Links Parameter und die css-Klasse für die von Bootstrap verwendeten Paginierungslinks. Hier ist das Ergebnis der erstellten Seite.

Fazit

Auf diese Weise erhalten Sie alles, was Sie wissen müssen, um die Paginierung in Ihrer Anwendung auszuführen.

Bitte zögern Sie nicht, Fragen, Kommentare oder allgemeines Feedback im untenstehenden Feed zu hinterlassen!

Immer noch festgefahren? Wenden Sie sich an einen unserer erfahrenen PHP-Entwickler in Envato Studio.