Paginering in CodeOntsteker met stapsgewijs voorbeeld
Databases zijn levende entiteiten. Ze groeien in de loop van de tijd. Bij het ontwerpen van applicaties moeten we rekening houden met de vele records die gebruikers moeten doorbladeren. Paginering stelt ons in staat om onze resultaten op te splitsen in kleinere, beheersbare delen. De volgende afbeelding toont een voorbeeld van paginering. Google zoeken.
In deze handleiding leer je hoe je databaseresultaten kunt pagineren. CodeIgniter met behulp van de pagineringsbibliotheek. Deze handleiding gaat ervan uit dat u bekend bent met de basisprincipes van CodeIgniter Active Record. Zo niet, lees dan de vorige handleidingen. We gaan er verder van uit dat je het al hebt gedownload. CodeOntsteker.
Database configuratie
We beginnen met het maken van de database en het invoegen van enkele dummyrecords. Het wordt een database met รฉรฉn tabel met 50 records erop.
Voer het volgende script uit tegen MySQL om de database-auteurstabel te maken. Voeg 50 dummyrecords in.
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');
Nu we onze database succesvol hebben aangemaakt en er dummy-records in hebben geplaatst, gaan we onze database configureren. CodeIgniter-applicatie voor communicatie met de database.
Open applicatie/config/database.php
Stel de databaseverbindingsparameters in op een manier die vergelijkbaar is met de volgende
$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', stelt de hostnaam van de database in
- 'gebruikersnaam' => 'root', specificeert de databasenaam
- 'password' => 'openseseme', stelt het databasewachtwoord in
- 'database' => 'ci_paginatie', specificeert de databasenaam.
We zullen ook de databasebibliotheek automatisch laden wanneer onze applicatie start. Laten we dat doen. Open applicatie/config/autoload.php
Laad de databasebibliotheek zoals weergegeven in de onderstaande code
$autoload['libraries'] = array('database');
Dat is het voor de databaseconfiguratie.
Laten we nu werken aan het databasemodel voor paginering
CodeIgniter-pagineringsdatabasemodel
Maak een nieuw model Authors_model in application/models
Voeg de volgende code toe
<?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 = 'auteurs'; definieer een beschermde variabele die de naam van de databasetabel voor het model definieert
- public function __construct() {โฆ} roept de ouderconstructormethode aan
- public function get_count() {โฆ} retourneert het totaal aantal records in de databasetabel. Dit is nodig voor pagineringsdoeleinden
- public function get_authors($limit, $start) {โฆ} definieert een methode die zal worden gebruikt om gepagineerde resultaten uit de database op te halen. We passeren de limiet en het startpunt. De limiet definieert het totale aantal records dat moet worden geretourneerd, terwijl start het aantal records definieert dat moet worden overgeslagen
dat is het voor ons databasemodel. Laten we nu de routes maken die zullen reageren op onze gepagineerde resultaten.
CodeIgniter-pagineringsroutes
Open het routesbestand in application/config/routes.php
Voeg de volgende route toe
$route['authors/(:num)'] = 'authors';
HIER,
- We definiรซren een routeauteur die een optionele parameter van het nummer accepteert. De optionele parameter wordt gedefinieerd door de openings- en sluitingshaakjes te gebruiken. De gedefinieerde route roept de indexmethode aan in de Authors-controller.
Laten we nu verder gaan met de controller voor onze gepagineerde resultaten
CodeIgniter Paginatiecontroller
Maak een nieuw bestand Authors.php in de map application/controllers
Voeg de volgende code toe
<?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 breidt CI_Controller uit {โฆ} we definiรซren een klasse Authors die de klasse CI_Controller uitbreidt
- public function __construct() {โฆ} deze methode initialiseert de bovenliggende constructor en laadt de url-helper, het auteursmodel en de pagineringsbibliotheek.
- public function index() {โฆ} definieert de methode die reageert op onze route-auteurs
- $config[โbase_urlโ] = base_url() . โauthorsโ; stelt de paginering in URL die gebruikt zullen worden om pagineringslinks te genereren
- $config[โtotal_rowsโ] = $this->authors_model->get_count(); stelt het totale aantal rijen in die moeten worden gepagineerd. De waarde wordt opgehaald uit het auteursmodel door de get_count methode aan te roepen.
- $config[โper_pageโ] = 10; definieert de rijen die per pagina moeten worden weergegeven
- $config[โuri_segmentโ] = 2; specificeert de URL segment dat de waarde bevat die gebruikt zal worden om records over te slaan
- $this->paginering->initialiseren($config); initialiseert de pagineringsbibliotheek met behulp van de configuratiearraywaarde die we hebben gedefinieerd en waaraan we de bovenstaande waarden hebben toegewezen.
- $page = ($dit->uri->segment(2)) ? $dit->uri->segment(2) : 0; controleert of het skip-nummer is ingesteld in het tweede segment van de URI en als dit niet is ingesteld, wordt de waarde 0 toegewezen aan de variabele $page
- $data[โlinksโ] = $this->paginering->create_links(); maakt de pagineringslinks en wijst deze toe aan de links-sleutel van de arrayvariabele $data.
- data['auteurs'] = $this->authors_model->get_authors($config[โper_pageโ], $page); heeft de gepagineerde auteursrecords opgehaald en deze toegewezen aan de auteurssleutel van de arrayvariabele $data
- $this->load->view('auteurs/index', $data); laadt de indexweergave in de auteursdirectory en geeft de arrayvariabele $data door.
Dat is het voor ons model. Laten we nu de weergave maken waarin onze databaseresultaten worden weergegeven.
Maak een nieuwe directory-auteurs in application/views
Maak een nieuw bestand index.php in application/views/authors/index.php
Voeg de volgende code toe
<!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,
- doorloopt de resultaten van de variabele $authors en drukt de resultaten af โโin een tabel
- drukt de pagineringslinks onderaan onze tabel af.
Laten we nu onze applicatie starten en de resultaten bekijken
In deze tutorial gebruiken we de ingebouwde PHP-webserver, maar u kunt elke webserver gebruiken die dit ondersteunt PHP.
Open de terminal
Voer de volgende opdracht uit
cd C:\Sites\ci-app php -S localhost:3000
HIER,
- Met de bovenstaande opdracht bladert u naar de map met toepassingscodes en start u de ingebouwde server op poort 3000.
Let op: het toepassingspad moet overeenkomen met het pad waar u het programma hebt gedownload. CodeIgniter. Daarvoor kunt u elk vrij poortnummer op uw computer gebruiken. Het is niet nodig om poort 3000 te gebruiken.
Open de webbrowser en laad het volgende: URL
http://localhost:3000/authors
U zou resultaten moeten kunnen krijgen die vergelijkbaar zijn met de volgende
Samenvatting
In deze zelfstudie hebben we de basisbeginselen van paginering besproken en gebruik gemaakt van de pagineringsbibliotheek in Codeontsteker en gebruikte het om een โโapplicatie te maken die databaseresultaten pagineert.


