Paginacja w CodeZapłonnik 4 z przykładem
⚡ Inteligentne podsumowanie
Paginacja w CodeIgniter dzieli duże zestawy wyników bazy danych na małe, łatwe w nawigacji strony za pomocą wbudowanej biblioteki paginacji. Ten przewodnik przedstawia działający przykład, który wysyła zapytanie do tabeli autorów, konfiguruje limity na stronę i renderuje numerowane linki nawigacyjne.
Bazy danych to żywe byty. Rozwijają się z upływem czasu. Projektując aplikacje, musimy wziąć pod uwagę liczbę rekordów, które użytkownicy będą musieli przeglądać. Paginacja pozwala nam podzielić wyniki na mniejsze, łatwiejsze w zarządzaniu części. Poniższy rysunek przedstawia przykład paginacji w… Google sprawdzić.
W tym samouczku dowiesz się, jak podzielić wyniki bazy danych na strony. CodeIgniter korzysta z biblioteki paginacji. Ten samouczek zakłada, że znasz podstawy CodeIgniter Active Record. Jeśli jeszcze go nie znasz, możesz przeczytać poprzednie samouczki. Drugim założeniem jest to, że już pobrałeś/aś. CodeZapalnik.
Konfiguracja bazy danych
Zaczniemy od stworzenia bazy danych i umieszczenia w niej fikcyjnych rekordów. Będzie to jednotabelowa baza danych zawierająca 50 rekordów.
Uruchom następujący skrypt MySQL do utworzenia tabeli autorów bazy danych. Wstaw 50 fikcyjnych rekordów.
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');
Teraz, gdy pomyślnie utworzyliśmy naszą bazę danych i wstawiliśmy do niej rekordy fikcyjnych, skonfigurujmy ją CodeAplikacja Igniter do komunikacji z bazą danych.
Otwórz aplikację/config/database.php
Ustaw parametry połączenia z bazą danych w sposób podobny do poniższego
$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 );
TUTAJ,
- 'hostname' => 'localhost', ustawia nazwę hosta bazy danych
- 'username' => 'root', określa nazwę użytkownika bazy danych
- 'password' => 'melody', ustawia hasło do bazy danych
- 'database' => 'ci_pagination', określa nazwę bazy danych.
Będziemy również automatycznie ładować bibliotekę bazy danych podczas uruchamiania naszej aplikacji. Zróbmy to. Otwórz plik application/config/autoload.php.
Załaduj bibliotekę bazy danych, jak pokazano w poniższym kodzie
$autoload['libraries'] = array('database');
To tyle, jeśli chodzi o konfigurację bazy danych.
Przyjrzyjmy się teraz modelowi bazy danych dla paginacji.
CodeModel bazy danych paginacji Igniter
Utwórz nowy model Authors_model w aplikacji/modelach
Dodaj następujący kod
<?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(); } }
TUTAJ,
- protected $table = 'authors'; definiuje chronioną zmienną, która przechowuje nazwę tabeli bazy danych dla modelu
- funkcja publiczna __construct() {…} wywołuje metodę konstruktora nadrzędnego
- Funkcja publiczna get_count() {…} zwraca całkowitą liczbę rekordów w tabeli bazy danych. Jest to niezbędne do paginacji.
- Funkcja publiczna get_authors($limit, $start) {…} definiuje metodę, która zostanie użyta do pobrania stronicowanych wyników z bazy danych. Przekazujemy limit i punkt startowy. Limit definiuje całkowitą liczbę rekordów do zwrócenia, a start definiuje liczbę rekordów, które należy pominąć.
To wszystko, jeśli chodzi o nasz model bazy danych. Teraz utwórzmy trasy, które będą reagować na nasze podzielone na strony wyniki.
CodeTrasy paginacji Igniter
Otwórz plik tras w application/config/routes.php
Dodaj następującą trasę
$route['authors/(:num)'] = 'authors';
TUTAJ,
- Definiujemy trasę „authors”, która akceptuje opcjonalny parametr w postaci liczby. Opcjonalny parametr jest definiowany za pomocą nawiasów otwierających i zamykających. Zdefiniowana trasa wywołuje metodę index w kontrolerze „authors”.
Przejdźmy teraz do kontrolera naszych podzielonych na strony wyników.
CodeKontroler stronicowania Igniter
Utwórz nowy plik Authors.php w katalogu application/controllers
Dodaj następujący kod
<?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); } }
TUTAJ,
- class Authors rozszerza klasę CI_Controller {…} definiujemy klasę Authors, która rozszerza klasę CI_Controller
- funkcja publiczna __construct() {…} ta metoda inicjuje konstruktor nadrzędny i ładuje pomocnika adresu URL, model autora i bibliotekę paginacji.
- funkcja publiczna indeks() {…} definiuje metodę, która odpowiada naszym autorom tras
- $config[“base_url”] = base_url() . “authors”; ustawia paginację URL który będzie używany do generowania linków paginacyjnych
- $config[“total_rows”] = $this->authors_model->get_count(); ustawia całkowitą liczbę wierszy, które należy podzielić na strony. Wartość jest pobierana z modelu autorów poprzez wywołanie metody get_count.
- $config[“per_page”] = 10; definiuje wiersze, które muszą być wyświetlane na każdej stronie
- $config[“uri_segment”] = 2; określa URL segment zawierający wartość, która będzie używana do pomijania rekordów
- $this->pagination->initialize($config); inicjuje bibliotekę stronicowania przy użyciu wartości tablicy konfiguracyjnej, którą zdefiniowaliśmy
- $page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; sprawdza, czy numer pominięcia został ustawiony w drugim segmencie URI, a jeśli nie jest ustawiony, to zmiennej $page przypisywana jest wartość 0
- $data[„links”] = $this->pagination->create_links(); tworzy łącza do stronicowania i przypisuje je do klucza linków zmiennej tablicowej $data.
- $data['authors'] = $this->authors_model->get_authors($config[“per_page”], $page); pobiera podzielone na strony rekordy autorów i przypisuje je do klucza authors zmiennej tablicowej $data
- $this->load->view('autorzy/indeks', $data); ładuje widok indeksu w katalogu autorów i przekazuje zmienną tablicową $data.
To wszystko, jeśli chodzi o nasz kontroler. Teraz utwórzmy widok, który będzie wyświetlał wyniki z naszej bazy danych.
Utwórz nowy katalog autorów w aplikacji/widokach
Utwórz nowy plik indeks.php w application/views/authors/index.php
Dodaj następujący kod
<!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>
TUTAJ,
- pętla przechodzi przez wyniki zmiennej $authors i drukuje wyniki w tabeli
- drukuje linki do stronicowania na dole naszej tabeli.
Uruchommy teraz naszą aplikację i sprawdźmy wyniki.
W tym samouczku używamy wbudowanego serwera WWW PHP, ale możesz użyć dowolnego serwera WWW, który obsługuje PHP.
Otwórz terminal
Uruchom następujące polecenie
cd C:\Sites\ci-app php -S localhost:3000
TUTAJ,
- Powyższe polecenie powoduje przejście do katalogu z kodem aplikacji i uruchomienie wbudowanego serwera na porcie 3000.
Uwaga: ścieżka aplikacji musi być taka sama, jak ścieżka, do której ją pobrano CodeIgniter. Możesz użyć dowolnego numeru portu, który jest wolny na Twoim komputerze. Nie musisz używać portu 3000.
Otwórz przeglądarkę internetową i załaduj następujące dane URL
http://localhost:3000/authors
Powinieneś być w stanie uzyskać wyniki podobne do poniższych
Jak dostosować CodeLinki do paginacji Igniter
Domyślnie metoda create_links() generuje proste znaczniki kotwic. Możesz umieścić te linki we własnym kodzie, aby pasowały do struktury CSS, takiej jak Bootstrap lub Bulma. Dodaj klucze stylów do tej samej tablicy $config przed wywołaniem 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';
Poniżej opisano najbardziej przydatne klucze konfiguracyjne.
- pełne_otwarcie_znacznika / pełne_zamknięcie_znacznika: znacznik obejmujący cały zestaw linków, idealny dla Lub pojemnik.
- liczba_otworzeń_znacznika / liczba_zamknięć_znacznika: znaczniki wokół każdego linku do ponumerowanej strony.
- cur_tag_open / cur_tag_close: znaczniki wokół numeru bieżącej, aktywnej strony.
- następny_link / poprzedni_link: tekst lub symbole używane dla przycisków Dalej i Poprzedni.
Ponieważ styl jest w całości zawarty w konfiguracji, możesz zmienić styl paginacji w całej aplikacji, edytując pojedynczą tablicę, bez konieczności modyfikowania logiki kontrolera.



