Paginering i CodeIgniter 4 med eksempel
โก Smart oppsummering
Paginering i CodeIgniter deler opp store databaseresultatsett i smรฅ, navigerbare sider ved hjelp av det innebygde pagineringsbiblioteket. Denne gjennomgangen bygger et fungerende eksempel som spรธr en forfattertabell, konfigurerer grenser per side og gjengir nummererte navigasjonslenker.

Databaser er levende enheter. De vokser etter hvert som tiden gรฅr. Nรฅr vi designer applikasjoner, mรฅ vi ta hensyn til de mange postene som brukerne mรฅ bla gjennom. Paginering lar oss dele opp resultatene vรฅre i smรฅ, hรฅndterbare deler. Fรธlgende bilde viser et eksempel pรฅ paginering pรฅ Google sรธke.
I denne veiledningen skal du lรฆre hvordan du paginerer databaseresultater i CodeIgniter ved hjelp av pagineringsbiblioteket. Denne veiledningen forutsetter at du er kjent med det grunnleggende om CodeIgniter Active Record. Hvis du ikke vet det ennรฅ, kan du lese de tidligere veiledningene. Den andre antagelsen er at du allerede har lastet ned CodeTennapparat.
Database konfigurasjon
Vi starter med รฅ lage databasen og sette inn noen dummy-poster i den. Det vil vรฆre en enkelt tabelldatabase med 50 poster pรฅ.
Kjรธr fรธlgende skript mot MySQL for รฅ lage databaseforfattertabellen. Sett inn 50 dummy-poster.
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');
Nรฅ som vi har opprettet databasen vรฅr og satt inn dummy-poster i den, la oss konfigurere CodeIgniter-applikasjonen for รฅ kommunisere med databasen.
ร pne application/config/database.php
Angi databasetilkoblingsparametere som ligner pรฅ fรธlgende
$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 );
HER,
- 'hostname' => 'localhost', setter vertsnavnet til databasen
- 'brukernavn' => 'root', angir databasebrukernavnet
- 'password' => 'melody', angir databasepassordet
- 'database' => 'ci_pagination', spesifiserer databasenavnet.
Vi vil ogsรฅ laste inn databasebiblioteket automatisk nรฅr applikasjonen vรฅr starter. La oss gjรธre det. ร pne application/config/autoload.php
Last inn databasebiblioteket som vist med koden nedenfor
$autoload['libraries'] = array('database');
Det er det for databasekonfigurasjonen.
La oss nรฅ jobbe med databasemodellen for paginering.
CodeIgniter Pagineringsdatabasemodell
Opprett en ny modell Authors_model i applikasjon/modeller
Legg til fรธlgende kode
<?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(); } }
HER,
- beskyttet $tabell = 'forfattere'; definerer en beskyttet variabel som inneholder databasetabellnavnet for modellen
- offentlig funksjon __construct() {...} kaller den overordnede konstruktรธrmetoden
- public function get_count() {โฆ} returnerer det totale antallet poster i databasetabellen. Dette er nรธdvendig for pagineringsformรฅl.
- public function get_authors($limit, $start) {โฆ} definerer en metode som skal brukes til รฅ hente paginerte resultater fra databasen. Vi sender inn limit og startpunkt. Limit definerer det totale antallet poster som skal returneres, mens start definerer antallet poster som skal hoppes over.
Det var alt for databasemodellen vรฅr. La oss nรฅ lage rutene som skal respondere pรฅ de paginerte resultatene vรฅre.
CodeIgniter pagineringsruter
ร pne rutefilen i application/config/routes.php
Legg til fรธlgende rute
$route['authors/(:num)'] = 'authors';
HER,
- Vi definerer en ruteforfatter som aksepterer en valgfri parameter for tallet . Den valgfrie parameteren defineres ved รฅ bruke รฅpnings- og lukkingsparentesene. Den definerte ruten kaller indeksmetoden i forfatterkontrolleren.
La oss nรฅ gรฅ videre til kontrolleren for vรฅre paginerte resultater.
CodeTenn-pagineringskontroller
Opprett en ny fil Authors.php i program/kontrollere-katalogen
Legg til fรธlgende kode
<?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); } }
HER,
- klasse Authors extends CI_Controller {...} vi definerer en klasse Authors som utvider CI_Controller-klassen
- offentlig funksjon __construct() {...} denne metoden initialiserer overordnet konstruktรธr og laster inn url-hjelperen, forfattermodellen og pagineringsbiblioteket.
- public function index() {...} definerer metoden som svarer til vรฅre ruteforfattere
- $config[โbase_urlโ] = base_url().โauthorsโ; angir pagineringen URL som skal brukes til รฅ generere pagineringslenker
- $config[โtotal_rowsโ] = $this->authors_model->get_count(); angir det totale antallet rader som mรฅ pagineres. Verdien hentes fra forfattermodellen ved รฅ kalle get_count-metoden.
- $config[โper_sideโ] = 10; definerer radene som mรฅ vises per side
- $config[โuri_segmentโ] = 2; spesifiserer URL segment som inneholder verdien som skal brukes til รฅ hoppe over poster
- $this->pagination->initialize($config); initialiserer pagineringsbiblioteket ved รฅ bruke config-arrayverdiene som vi definerte
- $page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; sjekker om skip-nummeret er angitt i det andre segmentet av URI-en, og hvis det ikke er angitt, tildeles verdien 0 til variabelen $page
- $data[โlinksโ] = $this->paginering->create_links(); oppretter pagineringskoblingene og tilordner dem til koblingsnรธkkelen til $data array-variabelen.
- $data['authors'] = $this->authors_model->get_authors($config[โper_pageโ], $page); henter de paginerte forfatteroppfรธringene og tilordner dem til authors-nรธkkelen til $data arrayvariabelen.
- $this->load->view('authors/index', $data); laster indeksvisningen i forfatterkatalogen og sender inn matrisevariabelen $data.
Det var alt for kontrolleren vรฅr. La oss nรฅ lage visningen som viser databaseresultatene vรฅre.
Opprett en ny katalogforfattere i applikasjon/visninger
Opprett en ny fil index.php i application/views/authors/index.php
Legg til fรธlgende kode
<!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:0 </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>
HER,
- gรฅr gjennom resultatene av variabelen $authors i lรธkker og skriver ut resultatene i en tabell
- skriver ut pagineringslenkene nederst i tabellen.
La oss nรฅ starte sรธknaden vรฅr og se resultatene.
I denne opplรฆringen bruker vi den innebygde PHP-webserveren, men du kan bruke hvilken som helst webserver som stรธtter PHP.
ร pne terminalen
Kjรธr fรธlgende kommando
cd C:\Sites\ci-app php -S localhost:3000
HER,
- Kommandoen ovenfor blar til programkodekatalogen og starter den innebygde serveren pรฅ port 3000.
Merk: applikasjonsstien mรฅ samsvare med stien der du lastet ned CodeIgniter. Du kan bruke et hvilket som helst ledig portnummer pรฅ datamaskinen din. Det er ikke nรธdvendig รฅ bruke port 3000.
ร pne nettleseren og last inn fรธlgende URL
http://localhost:3000/authors
Du bรธr kunne fรฅ resultater som ligner pรฅ fรธlgende
Hvordan tilpasse CodeIgniter-pagineringslenker
Som standard sender create_links()-metoden ut vanlige ankerkoder. Du kan pakke disse lenkene inn i din egen markup slik at de samsvarer med et CSS-rammeverk, for eksempel Bootstrap eller Bulma. Legg til stylingnรธklene i den samme $config-matrisen fรธr du kaller initialize().
$config['full_tag_open'] = '<nav><ul class="pagination">'; $config['full_tag_close'] = '</ul></nav>'; $config['num_tag_open'] = '<li class="page-item">'; $config['num_tag_close'] = '</li>'; $config['cur_tag_open'] = '<li class="page-item active"><a class="page-link">'; $config['cur_tag_close'] = '</a></li>'; $config['next_link'] = 'Next »'; $config['prev_link'] = '« Previous';
De mest nyttige konfigurasjonsnรธklene er beskrevet nedenfor.
- full_tag_รฅpen / full_tag_lukket: markup som omslutter hele settet med lenker, ideelt for en eller container.
- num_tag_open / num_tag_close: markering rundt hver nummererte sidelenke.
- cur_tag_open / cur_tag_close: markering rundt det gjeldende, aktive sidetallet.
- neste_lenke / forrige_lenke: teksten eller symbolene som brukes for neste og forrige knapper.
Fordi stylingen ligger utelukkende i konfigurasjonen, kan du endre paginering pรฅ tvers av hele applikasjonen ved รฅ redigere en enkelt array, uten รฅ rรธre kontrollerlogikken din.


