Paginierung in Codeigniter mit Schritt-für-Schritt-Beispiel

Datenbanken sind Lebewesen. Sie wachsen mit der Zeit. Beim Entwerfen von Anwendungen müssen wir die vielen Datensätze berücksichtigen, die die Benutzer durchsuchen müssen. Durch die Paginierung können wir unsere Ergebnisse in kleine, überschaubare Teile zerlegen. Die folgendenwing Das Bild zeigt ein Beispiel für die Paginierung in der Google-Suche.

Paginierung in Codeigniter

In diesem Tutorial erfahren Sie, wie Sie Datenbankergebnisse in CodeIgniter mithilfe der Paginierungsbibliothek paginieren. In diesem Tutorial wird davon ausgegangen, dass Sie mit den Grundlagen von CodeIgniter Active Record vertraut sind. Wenn nicht, können Sie die vorherigen Tutorials lesen. Die andere Annahme ist, dass Sie CodeIgniter bereits heruntergeladen haben.

Datenbankkonfiguration

Wir beginnen mit der Erstellung der Datenbank und dem Einfügen einiger Dummy-Datensätze. Es handelt sich um eine Einzeltabellendatenbank mit 50 Datensätzen.

Führen Sie Folgendes auswing Skript gegen MySQL um die Datenbankautorentabelle zu erstellen. Fügen Sie 50 Dummy-Datensätze ein.

CREATE SCHEMA ci_pagination;

DROP TABLE IF EXISTS `authors`;

CREATE TABLE `authors` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `last_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `birthdate` date NOT NULL,
  `added` timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (1, 'Brielle', 'O\'Hara', 'alexandre67@example.com', '1974-05-21', '1999-09-17 19:17:28');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (2, 'Flavio', 'Lehner', 'mafalda85@example.net', '1971-10-14', '1998-09-09 00:25:06');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (3, 'Elmira', 'Johns', 'wellington52@example.org', '1983-11-28', '2015-02-07 15:56:43');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (4, 'Elza', 'Mitchell', 'marisol46@example.org', '1989-03-08', '1992-08-21 00:21:39');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (5, 'Viva', 'Greenfelder', 'era94@example.com', '1995-04-17', '2017-04-30 05:55:39');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (6, 'Maxwell', 'VonRueden', 'mcassin@example.net', '1994-07-01', '1996-05-08 23:30:14');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (7, 'Deontae', 'Becker', 'rory.kub@example.org', '1992-02-19', '2017-07-22 11:49:15');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (8, 'Sylvester', 'Christiansen', 'erohan@example.org', '1990-09-03', '2004-05-08 08:15:37');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (9, 'Torrey', 'Strosin', 'adams.luciano@example.net', '1999-10-09', '2009-08-30 21:30:44');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (10, 'Kelli', 'Smitham', 'daniel.catalina@example.com', '2012-11-07', '1986-01-22 20:52:57');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (11, 'Abigale', 'Schuppe', 'andreanne.hayes@example.net', '2018-02-18', '1994-05-07 06:26:36');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (12, 'Letha', 'Gleason', 'eldridge.heaney@example.net', '2009-02-06', '1998-05-25 04:37:54');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (13, 'Sienna', 'Upton', 'monique57@example.org', '2017-08-17', '2009-08-08 19:08:10');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (14, 'Harley', 'Gutkowski', 'breilly@example.net', '1987-11-30', '1998-07-31 11:08:01');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (15, 'Lois', 'Bednar', 'hpouros@example.net', '2002-02-11', '2001-07-26 15:04:16');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (16, 'Gail', 'McDermott', 'reina.kerluke@example.com', '1987-03-30', '2004-12-15 20:38:29');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (17, 'Sydney', 'Strosin', 'dweber@example.net', '1985-04-29', '2010-08-07 08:50:35');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (18, 'Anne', 'Cremin', 'fritz.schmitt@example.com', '1976-02-15', '1980-03-25 05:29:41');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (19, 'Norberto', 'Bergnaum', 'franecki.javon@example.net', '1971-03-11', '1993-03-20 23:36:25');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (20, 'Arvid', 'Johns', 'pschultz@example.org', '2016-01-03', '1995-04-30 17:07:15');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (21, 'Bernita', 'Fay', 'arne96@example.org', '1983-12-26', '1987-02-23 16:55:28');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (22, 'Gonzalo', 'Gorczany', 'velma.huels@example.com', '1987-10-19', '2016-10-18 19:25:46');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (23, 'Jackie', 'Klein', 'gretchen.howe@example.com', '1971-01-20', '2010-11-16 02:58:05');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (24, 'Andrew', 'Kessler', 'collins.faye@example.org', '1984-08-07', '1971-12-15 08:46:42');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (25, 'Claire', 'Hudson', 'madalyn.wunsch@example.org', '1984-12-19', '1991-07-04 14:35:53');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (26, 'Prudence', 'Runte', 'koch.laurie@example.net', '2008-12-27', '1985-09-30 04:57:55');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (27, 'Destinee', 'Romaguera', 'tromp.tiffany@example.com', '1978-11-09', '1997-11-09 19:58:08');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (28, 'Marianna', 'Harvey', 'clovis.schuppe@example.com', '2013-08-28', '1990-08-06 19:29:19');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (29, 'Eloy', 'Lakin', 'wmorissette@example.net', '1989-12-08', '1974-03-16 03:21:16');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (30, 'Rubie', 'McClure', 'haley.louisa@example.net', '1987-09-12', '1998-07-02 10:45:36');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (31, 'Marisa', 'Stracke', 'zachary76@example.org', '1975-05-28', '1975-03-19 00:57:35');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (32, 'Jacey', 'Beatty', 'dahlia.hermann@example.org', '1979-12-17', '1971-01-21 16:50:58');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (33, 'Idella', 'Ruecker', 'elda.reichert@example.com', '2009-09-15', '1996-04-19 22:27:31');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (34, 'Dimitri', 'Bednar', 'freida.parker@example.org', '1998-12-02', '2008-12-30 23:29:57');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (35, 'Elfrieda', 'Smitham', 'padberg.rex@example.org', '2018-07-23', '1972-04-01 07:52:25');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (36, 'Dwight', 'Walter', 'gmosciski@example.org', '2016-08-15', '1994-07-02 11:06:55');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (37, 'Macie', 'Fay', 'uschuppe@example.net', '1976-01-29', '2005-12-13 18:44:46');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (38, 'Lori', 'Kshlerin', 'mhansen@example.net', '1983-04-08', '1986-01-18 16:03:52');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (39, 'Jeffry', 'Paucek', 'alisha35@example.net', '2002-10-02', '2004-03-29 07:06:03');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (40, 'Yvonne', 'Bernhard', 'jaqueline21@example.net', '2017-11-04', '1986-12-15 23:55:23');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (41, 'Ludwig', 'Heathcote', 'marcelino.kirlin@example.org', '1981-02-09', '2000-08-02 20:45:48');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (42, 'Jadyn', 'Wiegand', 'georgianna.swift@example.net', '1982-06-16', '1980-12-05 13:09:37');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (43, 'Ferne', 'Smitham', 'melany22@example.com', '1996-12-17', '1984-11-18 19:26:27');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (44, 'Meta', 'Corkery', 'xharber@example.com', '1972-03-31', '2007-01-20 00:07:31');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (45, 'Toni', 'Wolf', 'wyman.crystal@example.org', '2012-04-15', '1973-06-22 12:14:37');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (46, 'Zack', 'Luettgen', 'deion.konopelski@example.org', '2003-05-29', '2018-11-19 05:03:21');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (47, 'Kameron', 'Dietrich', 'ronaldo.torphy@example.com', '1973-05-20', '1974-09-16 20:27:17');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (48, 'Zetta', 'Lebsack', 'timmothy.vandervort@example.com', '1996-11-04', '2001-03-06 01:33:01');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (49, 'Benny', 'Hane', 'leone.lueilwitz@example.net', '2008-02-02', '2006-01-27 22:12:39');
INSERT INTO `authors` (`id`, `first_name`, `last_name`, `email`, `birthdate`, `added`) VALUES (50, 'Evans', 'Gleason', 'ccummerata@example.org', '1999-09-09', '1990-09-26 17:50:11');

Nachdem wir nun unsere Datenbank erfolgreich erstellt und Dummy-Datensätze eingefügt haben, konfigurieren wir unsere CodeIgniter-Anwendung für die Kommunikation mit der Datenbank.

Öffnen Sie application/config/database.php

Legen Sie die Datenbankverbindungsparameter wie folgt festwing

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => 'melody',
	'database' => 'ci_pagination',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

HIER,

  • 'hostname' => 'localhost', legt den Hostnamen der Datenbank fest
  • 'username' => 'root', gibt den Datenbanknamen an
  • 'password' => 'openseseme', legt das Datenbankpasswort fest
  • 'database' => 'ci_pagination', gibt den Datenbanknamen an.

Wir werden auch die Datenbankbibliothek automatisch laden, wenn unsere Anwendung startet. Lass uns das tun. Öffnen Sie application/config/autoload.php

Laden Sie die Datenbankbibliothek wie im folgenden Code gezeigt

$autoload['libraries'] = array('database');

Das war's mit der Datenbankkonfiguration.

Lassen Sie uns nun am Datenbankmodell für die Paginierung arbeiten

CodeIgniter-Paginierungsdatenbankmodell

Erstellen Sie ein neues Modell Authors_model in application/models

Fügen Sie Folgendes hinzuwing Code

<?php

class Authors_model extends CI_Model {

    protected $table = 'authors';

    public function __construct() {
        parent::__construct();
    }

    public function get_count() {
        return $this->db->count_all($this->table);
    }

    public function get_authors($limit, $start) {
        $this->db->limit($limit, $start);
        $query = $this->db->get($this->table);

        return $query->result();
    }
}

HIER,

  • protected $table = 'Autoren'; Definieren Sie eine geschützte Variable, die den Datenbanktabellennamen für das Modell definiert
  • Die öffentliche Funktion __construct() {…} ruft die übergeordnete Konstruktormethode auf
  • Die öffentliche Funktion get_count() {…} gibt die Gesamtzahl der Datensätze in der Datenbanktabelle zurück. Dies ist für Paginierungszwecke erforderlich
  • Die öffentliche Funktion get_authors($limit, $start) {…} definiert eine Methode, die zum Abrufen paginierter Ergebnisse aus der Datenbank verwendet wird. Wir werden das Limit und den Startpunkt übergeben. Der Grenzwert definiert die Gesamtzahl der zurückgegebenen Datensätze, während Start die Anzahl der Datensätze definiert, die übersprungen werden sollen

Das war’s für unser Datenbankmodell. Lassen Sie uns nun die Routen erstellen, die auf unsere paginierten Ergebnisse reagieren.

CodeIgniter-Paginierungsrouten

Öffnen Sie die Routendatei in application/config/routes.php

Fügen Sie Folgendes hinzuwing Route

$route['authors/(:num)'] = 'authors';

HIER,

  • Wir definieren einen Routenautor, der einen optionalen Parameter der Nummer akzeptiert. Der optionale Parameter wird durch die Verwendung der öffnenden und schließenden Klammern definiert. Die definierte Route ruft die Indexmethode im Authors-Controller auf.

Kommen wir nun zum Controller für unsere paginierten Ergebnisse

CodeIgniter-Paginierungscontroller

Erstellen Sie eine neue Datei Authors.php im Verzeichnis application/controllers

Fügen Sie Folgendes hinzuwing Code

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Authors extends CI_Controller {

    public function __construct() {
        parent:: __construct();

        $this->load->helper('url');
        $this->load->model('authors_model');
        $this->load->library("pagination");
    }

    public function index() {
        $config = array();
        $config["base_url"] = base_url() . "authors";
        $config["total_rows"] = $this->authors_model->get_count();
        $config["per_page"] = 10;
        $config["uri_segment"] = 2;

        $this->pagination->initialize($config);

        $page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;

        $data["links"] = $this->pagination->create_links();

        $data['authors'] = $this->authors_model->get_authors($config["per_page"], $page);

        $this->load->view('authors/index', $data);
    }
}

HIER,

  • Klasse Authors erweitert CI_Controller {…} Wir definieren eine Klasse Autoren, die die Klasse CI_Controller erweitert
  • öffentliche Funktion __construct() {…} Diese Methode initialisiert den übergeordneten Konstruktor und lädt den URL-Helfer, das Autorenmodell und die Paginierungsbibliothek.
  • Die öffentliche Funktion index() {…} definiert die Methode, die auf unsere Routenautoren reagiert
    • $config[“base_url”] = base_url() . „Autoren“; Legt die Paginierungs-URL fest, die zum Generieren von Paginierungslinks verwendet wird
    • $config[„total_rows“] = $this->authors_model->get_count(); legt die Gesamtzeile fest, die paginiert werden muss. Der Wert wird aus dem Autorenmodell abgerufen, indem die Methode get_count aufgerufen wird.
    • $config[„per_page“] = 10; definiert die Zeilen, die pro Seite angezeigt werden müssen
    • $config[„uri_segment“] = 2; Gibt das URL-Segment an, das den Wert enthält, der zum Überspringen von Datensätzen verwendet wird
    • $this->pagination->initialize($config); Initialisiert die Paginierungsbibliothek mit dem von uns definierten Konfigurationsarraywert und weist ihm die oben genannten Werte zu.
    • $page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; prüft, ob die Sprungnummer im zweiten Segment des URI gesetzt wurde und wenn sie nicht gesetzt ist, wird der Variablen $page der Wert 0 zugewiesen
    • $data[„links“] = $this->pagination->create_links(); erstellt die Paginierungslinks und weist sie dem Links-Schlüssel der Array-Variablen $data zu.
    • data['authors'] = $this->authors_model->get_authors($config[“per_page”], $page); hat die paginierten Autorendatensätze abgerufen und sie dem Autorenschlüssel der Array-Variablen $data zugewiesen
    • $this->load->view('authors/index', $data); lädt die Indexansicht im Autorenverzeichnis und übergibt die Array-Variable $data.

Das war's für unser Modell. Lassen Sie uns nun die Ansicht erstellen, die unsere Datenbankergebnisse anzeigt.

Erstellen Sie ein neues Verzeichnis „authors“ in „application/views“.

Erstellen Sie eine neue Datei index.php in application/views/authors/index.php

Fügen Sie Folgendes hinzuwing Code

<!DOCTYPE html>
<html>
    <head>
        <title>CodeIgniter Pagination</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <h3 class="title is-3">CodeIgniter Database Pagination</h3>
            <div class="column">
                <table class="table is-bordered is-striped is-narrow is-hoverable is-fullwidth">
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>Contact Name</th>
                            <th>Contact Number</th>
                            <th>Email</th>
                            <th>City</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($authors as $author): ?>
                            <tr>
                                <td><?= $author->id ?></td>
                                <td><?= $author->first_name ?></td>
                                <td><?= $author->last_name ?></td>
                                <td><?= $author->email ?></td>
                                <td><?= $author->birthdate ?></td>
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
                <p><?php echo $links; ?></p>
            </div>
        </div>
    </body>
</html>

HIER,

  • durchläuft die Ergebnisse der Variablen $authors und gibt die Ergebnisse in einer Tabelle aus
  • druckt die Paginierungslinks am Ende unserer Tabelle.

Beginnen wir nun mit unserer Anwendung und sehen wir uns die Ergebnisse an

In diesem Tutorial verwenden wir den integrierten PHP-Webserver, Sie können jedoch jeden Webserver verwenden, der dies unterstützt PHP.

Öffnen Sie das Terminal

Führen Sie Folgendes auswing Befehl

cd C:\Sites\ci-app
php -S localhost:3000

HIER,

  • Der obige Befehl navigiert zum Anwendungscodeverzeichnis und startet den integrierten Server auf Port 3000.

Hinweis: Der Anwendungspfad muss mit dem Pfad übereinstimmen, in den Sie CodeIgniter heruntergeladen haben. Hierzu können Sie jede freie Portnummer auf Ihrem Computer nutzen. Es ist nicht notwendig, Port 3000 zu verwenden.

Öffnen Sie den Webbrowser und laden Sie Folgendeswing URL

http://localhost:3000/authors

Sie sollten in der Lage sein, ähnliche Ergebnisse wie die folgenden zu erzielenwing

CodeIgniter-Paginierungscontroller

Zusammenfassung

In diesem Tutorial haben wir die Grundlagen der Paginierung behandelt und die Vorteile der Paginierungsbibliothek in genutzt CodeIgniter und nutzte es, um eine Anwendung zu erstellen, die Datenbankergebnisse paginiert.