Paginierung in CodeIgniter Das vollständige Handbuch

Die Verwendung eines Full-Stack-Webanwendungsframeworks hat den Vorteil, dass Sie sich nicht um die üblichen Aufgaben wie Eingabeverarbeitung, Formularüberprüfung und Ähnliches kümmern müssen, da das Framework bereits Wrapper für diese Features bereitstellt. Auf diese Weise können Sie sich auf die Geschäftslogik der Anwendung konzentrieren, anstatt das Rad immer wieder neu zu erfinden.

Heute werden wir eine wichtige Bibliothek im CodeIgniter-Framework erkunden - die Paginierungsbibliothek.

Lassen Sie mich die Themen hervorheben, die wir in diesem Artikel behandeln werden:

  • Demonstration von Basis-Paging
  • Entdecken Sie die Anpassungsoptionen
  • Paginierung Konfiguration

Demonstration von Basis-Paging

In diesem Abschnitt gehen wir ein Beispiel durch, das die Verwendung von Paginierung in CodeIgniter veranschaulicht. Es ist der beste Weg, um zu verstehen, wie die Dinge insgesamt funktionieren.

In unserem Beispiel erstellen wir eine ziemlich einfache Benutzerliste, in der Datensätze aus der MySQL-Tabelle des Benutzers abgerufen werden. Um dieses Beispiel erfolgreich auszuführen, stellen Sie sicher, dass Sie über die uid und dein Name Felder in Ihrer Benutzertabelle.

Damit sind wir bereit zu rollen.

Fahren Sie fort und erstellen Sie eine Controller-Datei Steuerungen / Paging.php mit folgenden Inhalten.

load-> library ("Paginierung"); // Lade URL-Helfer $ this-> load-> helper ('url');  public function index () // load db und model $ this-> load-> database (); $ this-> load-> model ('Benutzer'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // Aktuelle Datensätze abrufen $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'paging / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ this-> pagination-> initialize ($ config); // Paging-Links erstellen $ params ["links"] = $ this-> pagination-> create_links ();  $ this-> load-> view ('user_listing', $ params);  public function custom () // load db und model $ this-> load-> database (); $ this-> load-> model ('Benutzer'); // init params $ params = array (); $ limit_per_page = 2; $ page = ($ this-> uri-> segment (3))? ($ this-> uri-> segment (3) - 1): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // Aktuelle Datensätze abrufen $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ page * $ limit_per_page); $ config ['base_url'] = base_url (). 'paging / custom'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; // Benutzerdefinierte Paging-Konfiguration $ config ['num_links'] = 2; $ config ['use_page_numbers'] = TRUE; $ config ['reuse_query_string'] = TRUE; $ config ['full_tag_open'] = '
'; $ config ['full_tag_close'] = '
'; $ config ['first_link'] = 'Erste Seite'; $ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_link'] = 'Letzte Seite'; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_link'] = 'Nächste Seite'; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_link'] = 'Vorherige Seite'; $ config ['prev_tag_open'] = ''; $ config ['prev_tag_close'] = ''; $ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = ''; $ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = ''; $ this-> pagination-> initialize ($ config); // Paging-Links erstellen $ params ["links"] = $ this-> pagination-> create_links (); $ this-> load-> view ('user_listing', $ params);

Als nächstes benötigen wir eine Modelldatei models / Benutzer.php das holt Datensätze aus der Benutzertabelle.

db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("Benutzer"); if ($ query-> num_rows ()> 0) foreach ($ query-> result () als $ row) $ data [] = $ row;  Rückgabe von $ data;  falsch zurückgeben;  public function get_total () return $ this-> db-> count_all ("Benutzer"); 

Schließlich erstellen wir eine Ansichtsdatei unter views / user_listing.php das zeigt die Benutzerliste an.

   Paging-Beispiel - Benutzerliste   

Benutzerliste

ICH WÜRDE NAME
uid?> uname?>
Keine Benutzer gefunden.

Greifen Sie jetzt auf unsere benutzerdefinierte Seite unter http: // Ihre-Code-Igniter-Site / Paging / Index zu und Sie sollten die Benutzerliste zusammen mit der Paginierung sehen! Das ist es also, wir haben es geschafft! Keine Sorge, ich werde dich nicht so bald verlassen, da wir jetzt jeden Teil des Codes analysieren.

Wir beginnen mit der Modelldatei models / Benutzer.php da dies etwas von unseren Controller-Methoden genannt wird. Es gibt zwei wichtige Methoden, get_current_page_records und get_total, dass unser Modell implementiert, um die Paginierungslinks aufzubauen.

Lass uns durch gehen get_total Methode. Es wird verwendet, um die Anzahl der Datensätze in der Benutzertabelle zu zählen.

public function get_total () return $ this-> db-> count_all ("Benutzer"); 

Als nächstes gibt es eine get_current_page_records Methode.

öffentliche Funktion get_current_page_records ($ limit, $ start) $ this-> db-> limit ($ limit, $ start); $ query = $ this-> db-> get ("Benutzer"); if ($ query-> num_rows ()> 0) foreach ($ query-> result () als $ row) $ data [] = $ row;  Rückgabe von $ data;  falsch zurückgeben; 

Es gibt zwei wichtige Argumente, die Sie im Dokument beachten sollten get_current_page_records Methode. Das erste Argument, $ limit, wird verwendet, um die Anzahl der Datensätze anzugeben, die beim Abfragelauf zurückgegeben werden. Und das zweite Argument, $ start, fungiert als Startindex des Datensatzes.

Wie Sie sehen können, geben Sie die Werte von an $ start und $ limit Wir können Datensätze pro Seite abrufen. Das ist die Essenz des Paging, und mittlerweile haben wir die wichtigste Methode dieses Artikels implementiert!

Das war also unser Modell - einfach und elegant!

Lassen Sie uns auf die Controller-Datei aufmerksam werden. Holen Sie sich den Code der Konstruktormethode.

öffentliche Funktion __construct () parent :: __ construct (); // Lade Paginierungsbibliothek $ this-> load-> library ('pagination'); // Lade URL-Helfer $ this-> load-> helper ('url'); 

Um die Paginierung in CodeIgniter verwenden zu können, müssen Sie zunächst die Paginierungsbibliothek laden. Und wir können es mit machen $ this-> load-> library ('Paginierung').

Wir haben auch den URL-Helfer geladen, damit globale Helferfunktionen, die von diesem Helfer bereitgestellt werden, verwendet werden können.

Jetzt sind wir bereit, durch das Herz unseres Controllers zu gehen Index Methode.

public function index () // load db und model $ this-> load-> database (); $ this-> load-> model ('Benutzer'); // init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); if ($ total_records> 0) // Aktuelle Datensätze abrufen $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index); $ config ['base_url'] = base_url (). 'paging / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ this-> pagination-> initialize ($ config); // Paging-Links erstellen $ params ["links"] = $ this-> pagination-> create_links ();  $ this-> load-> view ('user_listing', $ params); 

Zunächst stellen wir sicher, dass die Datenbank ordnungsgemäß geladen ist. Danach laden wir die Benutzer Modell, so dass wir die Modellmethoden verwenden können.

$ this-> load-> database (); $ this-> load-> model ('Benutzer');

Als Nächstes initialisieren wir einige wichtige Variablen.

// init params $ params = array (); $ limit_per_page = 1; $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total ();

Die Variable $ limit_per_page Definiert das Limit pro Seite. Natürlich können Sie es nach Belieben einstellen. Es ist momentan beispielsweise auf 1 gesetzt.

Das $ start_index Variable enthält den Startindex des MySQL-Datensatzes. Wenn CodeIgniter die Paginierungslinks erstellt, wird standardmäßig der Startindex der Seite als drittes Segment in der URL angehängt. Sie können dieses Standardverhalten ändern. Dies ist jedoch etwas, das wir für den letzten Abschnitt dieses Artikels reservieren, in dem wir Anpassungsoptionen besprechen.

Zum Schluss nennen wir das get_total Methode des Users-Modells, um die Gesamtdatensätze der Users-Tabelle abzurufen und diese der $ total_records Variable.

Als nächstes holen wir die Datensätze der aktuellen Seite mit der get_current_page_records Methode.

// aktuelle Seitenaufzeichnungen abrufen $ params ["results"] = $ this-> Users-> get_current_page_records ($ limit_per_page, $ start_index);

Bevor wir tatsächlich Paginierungs-Links erstellen können, müssen Sie die minimale Paging-Konfiguration mit Hilfe von initialisieren initialisieren Methode der Paging-Bibliothek.

$ config ['base_url'] = base_url (). 'paging / index'; $ config ['total_rows'] = $ total_records; $ config ['per_page'] = $ limit_per_page; $ config ["uri_segment"] = 3; $ this-> pagination-> initialize ($ config);

Und das ist der Satz von Mindestparametern, um die Paginierungslinks aufzubauen.

  • base_url: Die URL, die beim Erstellen von Paginierungslinks verwendet wird
  • total_rows: Gesamtzahl der Datensätze
  • pro Seite: Anzahl der Aufzeichnungen pro Seite

Zum Schluss verwenden wir die create_links Methode zum Erstellen von Paginierungslinks.

// Paging-Links erstellen $ params ["links"] = $ this-> pagination-> create_links ();

Der Rest ist nur die Formalität, um unsere Ansicht zu bezeichnen user_listing und die Ausgabe rendern! Führen Sie die URL http: // Ihre-Code-Igniter-Site / Paging / Index aus, um die Benutzerauflistung zusammen mit den Paginierungslinks anzuzeigen.

Dies ist ein sehr einfaches und dennoch nützliches Beispiel für die Paginierung, das Sie an Ihre Anforderungen anpassen können.

Im nächsten Abschnitt erfahren Sie, wie Sie die Standard-Paginierung in Bezug auf Aussehen und Funktionalität anpassen können.

Anpassungsoptionen erkunden

In diesem Abschnitt werden die verfügbaren Optionen erläutert, die Sie verwenden können, wenn Sie die Standard-Seitenumbruch-Links anpassen möchten.

URI-Segment

Obwohl die CodeIgniter-Auslagerungsbibliothek den auslagerungsbezogenen Parameter automatisch aus der URL erkennt, können Sie einen benutzerdefinierten Wert definieren, wenn Sie ein anderes URL-Muster verwenden.

$ config ["uri_segment"] = 4;

Anzahl der Ziffernverknüpfungen

Das num_links Mit dieser Option können Sie die Anzahl von festlegen Ziffer Links, die vor und nach der aktiven Seitennummer in den Paginierungslinks angezeigt werden.

$ config ['num_links'] = 2;

Seitennummer als URI-Segment

Wenn Sie auf das Paging-URI-Segment zugreifen, ist dies standardmäßig ein Startindex. Wenn Sie beispielsweise zehn Datensätze pro Seite haben, ist das Paging-URI-Segment 20 für die dritte Seite. Wenn Sie stattdessen die tatsächlichen Seitennummern in den Seitenlinks anzeigen möchten, können Sie festlegen use_page_numbers zu WAHR.

$ config ['use_page_numbers'] = TRUE;

Natürlich müssen Sie sicherstellen, dass Sie den richtigen Startindex basierend auf der Seitennummer berechnen, die Sie von der URL abrufen.

Abfragezeichenfolge beibehalten

In den meisten Fällen landen Sie in der Situation, in der Sie die Parameter für die Abfragezeichenfolge beibehalten möchten, die nicht mit der Paginierung zusammenhängen. Du kannst den ... benutzen reuse_query_string Option, um diese Einrichtung zu aktivieren.

$ config ['reuse_query_string'] = TRUE;

Dies sind einige Optionen, mit denen Sie die standardmäßige Paginierungsfunktion ändern können. Als Nächstes betrachten wir einige andere Optionen, mit denen Sie die Anzeige von Seitenumbrüchen ändern können.

Wrapper-Tag

Wenn Sie den Paginierungscode mit einem anderen HTML-Tag umschließen möchten, können Sie dies mit dem full_tag_open und full_tag_close Optionen.

$ config ['full_tag_open'] = '
'; $ config ['full_tag_close'] = '
';

Es kann sehr nützlich sein, wenn Sie die Paginierungslinks benutzerdefiniert gestalten möchten.

Erste, Letzte, Nächste und Vorherige

Wenn Sie den Text ändern möchten, der für den ersten, letzten, nächsten und vorherigen Link angezeigt wird, können Sie dies auch tun.

$ config ['first_link'] = 'Erste Seite'; $ config ['last_link'] = 'Letzte Seite'; $ config ['next_link'] = 'Nächste Seite'; $ config ['prev_link'] = 'Vorherige Seite';

Wenn Sie diese einzelnen Links mit einem beliebigen HTML-Tag umschließen möchten, können Sie dies auf dieselbe Weise tun, wie wir es getan haben, um den gesamten Paging-Code einzuhüllen.

$ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_tag_open'] = ''; $ config ['prev_tag_close'] = '';

Aktiver Link und Nummernlink

Manchmal möchten Sie den aktiven Link anders gestalten. Sie können dies tun, indem Sie Wrapper-Tags wie unten gezeigt anwenden.

$ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = '';

Genauso, wenn Sie Ziffernverknüpfungen mit etwas umschließen möchten:

$ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = '';

Damit ist die Geschichte der Individualisierung beendet. In der Tat könnten Sie sich das Beispiel für die Anpassung unter http: // Ihre-Code-Igniter-Site / Paging / Custom ansehen, das bereits in unserer Controller-Datei enthalten ist!

Paging-Konfiguration

Nun wissen Sie, welche Konfiguration erforderlich ist, um eine anständige Seitenumstellung mit einer beliebigen Modellliste einzurichten. Und die meiste Zeit möchten Sie es auf der gesamten Site gleich halten. Was wirst du tun, um das zu erreichen? Sie könnten versucht sein, den Konfigurationscode zu kopieren und in jede Aktion einzufügen, für die die Konfiguration der Paginierung erforderlich ist.

Es gibt sogar eine bessere Möglichkeit, mit diesem Szenario umzugehen. Sie können eine Paging-Konfigurationsdatei unter erstellen application / config / pagination.php und benutze die $ config Variable, um Ihre Einstellungen zu definieren.

'; $ config ['full_tag_close'] = '
'; $ config ['first_link'] = 'Erste Seite'; $ config ['first_tag_open'] = ''; $ config ['first_tag_close'] = ''; $ config ['last_link'] = 'Letzte Seite'; $ config ['last_tag_open'] = ''; $ config ['last_tag_close'] = ''; $ config ['next_link'] = 'Nächste Seite'; $ config ['next_tag_open'] = ''; $ config ['next_tag_close'] = ''; $ config ['prev_link'] = 'Vorherige Seite'; $ config ['prev_tag_open'] = ''; $ config ['prev_tag_close'] = ''; $ config ['cur_tag_open'] = ''; $ config ['cur_tag_close'] = ''; $ config ['num_tag_open'] = ''; $ config ['num_tag_close'] = '';

Darauf basierend wurde das überarbeitet Index Aktionsmethode sollte so aussehen:

public function index () // load db und model $ this-> load-> database (); $ this-> load-> model ('Benutzer'); // init params $ params = array (); $ start_index = ($ this-> uri-> segment (3))? $ this-> uri-> segment (3): 0; $ total_records = $ this-> Users-> get_total (); // Lade Konfigurationsdatei $ this-> config-> load ('pagination', TRUE); $ settings = $ this-> config-> item ('Paginierung'); $ settings ['total_rows'] = $ this-> Users-> get_total (); $ settings ['base_url'] = base_url (). 'paging / config'; if ($ total_records> 0) // Aktuelle Datensätze abrufen $ params ["results"] = $ this-> Users-> get_current_page_records ($ settings ['per_page'], $ start_index); // Verwenden Sie die Einstellungen, um die Bibliothek zu initialisieren. $ this-> pagination-> initialize ($ settings); // Paging-Links erstellen $ params ["links"] = $ this-> pagination-> create_links ();  $ this-> load-> view ('user_listing', $ params); 

Natürlich die total_rows und base_url Variablen ändern sich von Aktion zu Aktion. Sie müssen also in jeder Aktion explizit festgelegt werden.

Dazu müssen Sie zunächst die Paginierungskonfiguration laden.

$ this-> config-> load ('pagination', TRUE); $ settings = $ this-> config-> item ('Paginierung');

Als Nächstes können Sie die aktionsspezifischen Einstellungen überschreiben.

$ settings ['total_rows'] = $ this-> Users-> get_total (); $ settings ['base_url'] = base_url (). 'paging / config';

Und damit bist du fertig!

Das war also die Geschichte der Paginierungskonfiguration, und damit endet auch dieser Artikel!

Fazit

Heute haben wir die Paginierungsbibliothek in CodeIgniter durchlaufen.

Im ersten Teil dieses Artikels habe ich gezeigt, wie Sie die Paginierungsbibliothek verwenden können, indem Sie ein sehr einfaches und dennoch nützliches Beispiel geben.

Anschließend haben wir die Anpassungsoptionen besprochen, die Ihnen beim Einrichten der Paginierung zur Verfügung stehen.

Schließlich haben wir die Konfiguration der Paginierung im letzten Abschnitt besprochen.

CodeIgniter ist eine leistungsfähige PHP-Plattform. Egal, ob Sie gerade erst anfangen oder mit der nächsten Version anfangen, vergessen Sie nicht zu prüfen, was wir für Sie zur Verfügung haben.

Ich würde gerne Ihr Feedback in Form von Anfragen und Kommentaren über den untenstehenden Feed erfahren!