Označavanje stranica u Codeigniteru s primjerom korak po korak
Baze podataka su živa bića. Oni rastu kako vrijeme prolazi. Prilikom dizajniranja aplikacija moramo uzeti u obzir mnoge zapise koje će korisnici morati pregledavati. Paginacija nam omogućuje rastavljanje rezultata na male dijelove kojima se može upravljati. Sljedeća slika prikazuje primjer označavanja stranica na Google pretraživanju.
U ovom ćete vodiču naučiti kako paginirati rezultate baze podataka u CodeIgniteru pomoću knjižnice paginacije. Ovaj vodič pretpostavlja da ste upoznati s osnovama CodeIgniter Active Record. Ako ne, onda možete pročitati prethodne upute. Druga pretpostavka je da ste već preuzeli CodeIgniter.
Konfiguracija baze podataka
Počet ćemo s izradom baze podataka i umetanjem nekih lažnih zapisa u nju. To će biti jedna tablica baze podataka s 50 zapisa na njoj.
Pokrenite sljedeću skriptu protiv MySQL za stvaranje tablice autora baze podataka. Umetnite 50 lažnih zapisa.
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');
Sada kada smo uspješno stvorili našu bazu podataka i u nju umetnuli lažne zapise, konfigurirajmo našu aplikaciju CodeIgniter za komunikaciju s bazom podataka.
Otvorite application/config/database.php
Postavite parametre veze s bazom podataka na sličan način
$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 );
OVDJE,
- 'hostname' => 'localhost', postavlja naziv hosta baze podataka
- 'username' => 'root', navodi naziv baze podataka
- 'password' => 'openseseme', postavlja lozinku baze podataka
- 'database' => 'ci_pagination', navodi naziv baze podataka.
Također ćemo automatski učitavati biblioteku baze podataka kada se naša aplikacija pokrene. Učinimo to. Otvorite application/config/autoload.php
Učitajte biblioteku baze podataka kao što je prikazano donjim kodom
$autoload['libraries'] = array('database');
To je sve za konfiguraciju baze podataka.
Poradimo sada na modelu baze podataka za paginaciju
CodeIgniter Model baze podataka paginacije
Napravite novi model Authors_model u aplikaciji/modeli
Dodajte sljedeći 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(); } }
OVDJE,
- zaštićena $tablica = 'autori'; definirajte zaštićenu varijablu koja definira naziv tablice baze podataka za model
- javna funkcija __construct() {…} poziva roditeljsku metodu konstruktora
- javna funkcija get_count() {…} vraća ukupne zapise u tablici baze podataka. Ovo je potrebno za potrebe paginacije
- javna funkcija get_authors($limit, $start) {…} definira metodu koja će se koristiti za dohvaćanje paginiranih rezultata iz baze podataka. Proći ćemo u limitu i startnoj točki. Ograničenje definira ukupan broj zapisa koji se vraćaju, dok početak definira broj zapisa koji se trebaju preskočiti
to je to za naš model baze podataka. Kreirajmo sada rute koje će odgovarati našim paginiranim rezultatima.
Rute paginacije CodeIgnitera
Otvorite datoteku ruta u aplikaciji/config/routes.php
Dodajte sljedeću rutu
$route['authors/(:num)'] = 'authors';
OVDJE,
- Definiramo autora rute koji prihvaća izborni parametar broja. Izborni parametar definiran je upotrebom otvarajuće i zatvarajuće zagrade. Definirana ruta poziva metodu indeksa u kontroleru autora.
Prijeđimo sada na kontroler za naše paginirane rezultate
CodeIgniter kontroler paginacije
Napravite novu datoteku Authors.php u direktoriju application/controllers
Dodajte sljedeći 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); } }
OVDJE,
- class Authors extends CI_Controller {…} definiramo klasu Authors koja proširuje klasu CI_Controller
- javna funkcija __construct() {…} ova metoda inicijalizira nadređeni konstruktor i učitava url pomoćnik, model autora i biblioteku paginacije.
- javna funkcija index() {…} definira metodu koja odgovara našim autorima rute
- $config[“base_url”] = base_url() . “autori”; postavlja URL za paginaciju koji će se koristiti za generiranje veza za paginaciju
- $config[“total_rows”] = $this->authors_model->get_count(); postavlja ukupan redak koji treba paginirati. Vrijednost se dohvaća iz modela autora pozivanjem metode get_count.
- $config[“per_page”] = 10; definira retke koji trebaju biti prikazani po stranici
- $config[“uri_segment”] = 2; specificira URL segment koji sadrži vrijednost koja će se koristiti za preskakanje zapisa
- $this->pagination->initialize($config); inicijalizira biblioteku paginacije koristeći vrijednost niza konfiguracije koju smo definirali i kojoj dodijelimo gornje vrijednosti.
- $stranica = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; provjerava je li broj preskakanja postavljen u drugom segmentu URI-ja i ako nije postavljen tada se vrijednost 0 dodjeljuje varijabli $page
- $data[“links”] = $this->pagination->create_links(); stvara veze za paginaciju i dodjeljuje ih ključu poveznica varijable polja $data.
- data['authors'] = $this->authors_model->get_authors($config[“per_page”], $page); dohvatio paginirane zapise autora i dodijelio ih ključu autora varijable polja $data
- $this->load->view('autori/indeks', $podaci); učitava prikaz indeksa u direktoriju autora i prosljeđuje varijablu polja $data.
To je to za naš model. Kreirajmo sada prikaz koji će prikazati rezultate naše baze podataka.
Stvorite novi imenik autora u aplikaciji/prikazima
Napravite novu datoteku index.php u aplikaciji/views/authors/index.php
Dodajte sljedeći 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://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>
OVDJE,
- prolazi kroz rezultate varijable $authors i ispisuje rezultate u tablici
- ispisuje veze na stranice na dnu naše tablice.
Pokrenimo sada našu aplikaciju i vidimo rezultate
U ovom vodiču koristimo ugrađeni PHP web poslužitelj, ali možete koristiti bilo koji web poslužitelj koji podržava PHP.
Otvorite terminal
Pokrenite sljedeću naredbu
cd C:\Sites\ci-app php -S localhost:3000
OVDJE,
- Gornja naredba pregledava direktorij koda aplikacije i pokreće ugrađeni poslužitelj na portu 3000.
Napomena: put aplikacije mora odgovarati putu na koji ste preuzeli CodeIgniter. Za to možete koristiti bilo koji broj priključka koji je slobodan na vašem računalu. Nije potrebno koristiti port 3000.
Otvorite web preglednik i učitajte sljedeći URL
http://localhost:3000/authors
Trebali biste moći dobiti rezultate slične sljedećima
Rezime
U ovom vodiču pokrili smo osnove označavanja stranica i iskoristili prednosti knjižnice označavanja stranica u CodeIgniter i upotrijebio ga za izradu aplikacije koja paginira rezultate baze podataka.