Sideinddeling i Codeigniter med trin for trin eksempel

Databaser er levende vรฆsener. De vokser som tiden gรฅr. Nรฅr vi designer applikationer, skal vi tage hรธjde for de mange poster, som brugerne skal gennemse. Sideinddeling giver os mulighed for at opdele vores resultater i smรฅ hรฅndterbare dele. Fรธlgende billede viser et eksempel pรฅ paginering pรฅ Google-sรธgning.

Sideinddeling i Codeigniter

I denne vejledning skal du lรฆre, hvordan du paginerer databaseresultater i CodeIgniter ved hjรฆlp af pagineringsbiblioteket. Denne vejledning forudsรฆtter, at du er bekendt med det grundlรฆggende i CodeIgniter Active Record. Hvis du ikke gรธr det, kan du lรฆse de tidligere tutorials. Den anden antagelse er, at du allerede har downloadet CodeIgniter.

Database konfiguration

Vi starter med at oprette databasen og indsรฆtte nogle dummy-records i den. Det vil vรฆre en enkelt tabeldatabase med 50 poster pรฅ.

Kรธr fรธlgende script mod MySQL for at oprette databaseforfattertabellen. Indsรฆt 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');

Nu hvor vi har oprettet vores database med succes og indsat dummy-poster i den, lad os konfigurere vores CodeIgniter-applikation til at kommunikere med databasen.

ร…bn application/config/database.php

Indstil databaseforbindelsesparametre svarende til 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', indstiller vรฆrtsnavnet for databasen
  • 'brugernavn' => 'rod', angiver databasenavnet
  • 'password' => 'openseseme', indstiller databaseadgangskoden
  • 'database' => 'ci_pagination', angiver databasenavnet.

Vi vil ogsรฅ automatisk indlรฆse databasebiblioteket, nรฅr vores applikation starter. Lad os gรธre det. ร…bn application/config/autoload.php

Indlรฆs databasebiblioteket som vist med koden nedenfor

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

Det er det for databasekonfigurationen.

Lad os nu arbejde pรฅ databasemodellen for paginering

CodeIgniter Pagineringsdatabasemodel

Opret en ny model Authors_model i application/models

Tilfรธj 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 $table = 'forfattere'; definere en beskyttet variabel, der definerer databasetabelnavnet for modellen
  • public funktion __construct() {...} kalder den overordnede konstruktรธrmetode
  • public funktion get_count() {...} returnerer det samlede antal poster i databasetabellen. Dette er et behov for pagineringsformรฅl
  • public funktion get_authors($limit, $start) {...} definerer en metode, der vil blive brugt til at hente paginerede resultater fra databasen. Vi passerer grรฆnsen og startpunktet. Grรฆnsen definerer det samlede antal poster, der skal returneres, mens start definerer antallet af poster, der skal springes over

det er det for vores databasemodel. Lad os nu oprette de ruter, der vil reagere pรฅ vores sideinddelte resultater.

CodeIgniter pagineringsruter

ร…bn rutefilen i application/config/routes.php

Tilfรธj fรธlgende rute

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

HER,

  • Vi definerer en ruteforfatter, der accepterer en valgfri parameter for nummeret. Den valgfrie parameter defineres ved at bruge รฅbnings- og lukkebeslag. Den definerede rute kalder indeksmetoden i Authors-controlleren.

Lad os nu gรฅ videre til controlleren for vores paginerede resultater

CodeIgniter pagineringscontroller

Opret en ny fil Authors.php i application/controllers bibliotek

Tilfรธj 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 udvider CI_Controller {...} vi definerer en klasse Authors, der udvider CI_Controller-klassen
  • public funktion __construct() {...} denne metode initialiserer den overordnede konstruktรธr og indlรฆser url-hjรฆlperen, forfattermodellen og pagineringsbiblioteket.
  • public function index() {...} definerer metoden, der reagerer pรฅ vores ruteforfattere
    • $config[โ€œbase_urlโ€] = base_url() . "forfattere"; angiver paginerings-URL'en, der vil blive brugt til at generere pagineringslinks
    • $config[โ€œtotal_rowsโ€] = $this->authors_model->get_count(); angiver den samlede rรฆkke, der skal pagineres. Vรฆrdien hentes fra forfattermodellen ved at kalde get_count metoden.
    • $config[โ€œper_sideโ€] = 10; definerer de rรฆkker, der skal vises pr. side
    • $config[โ€œuri_segmentโ€] = 2; angiver URL-segmentet, der indeholder den vรฆrdi, der vil blive brugt til at springe poster over
    • $this->pagination->initialize($config); initialiserer pagineringsbiblioteket ved hjรฆlp af config-array-vรฆrdien, som vi har defineret og tildelt ovenstรฅende vรฆrdier til.
    • $side = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; kontrollerer, om springnummeret er blevet indstillet i det andet segment af URI'en, og hvis det ikke er indstillet, tildeles vรฆrdien 0 til variablen $page
    • $data[โ€œlinksโ€] = $this->pagination->create_links(); opretter pagineringslinkene og tildeler dem til linknรธglen i $data array-variablen.
    • data['authors'] = $this->authors_model->get_authors($config[โ€œper_pageโ€], $page); hentede de paginerede forfatterposter og tildeler dem til forfatternรธglen for $data array-variablen
    • $this->load->view('authors/index', $data); indlรฆser indeksvisningen i forfatterbiblioteket og sender array-variablen $data ind.

Det er det for vores model. Lad os nu oprette den visning, der viser vores databaseresultater.

Opret en ny mappeforfattere i applikation/visninger

Opret en ny fil index.php i application/views/authors/index.php

Tilfรธj 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://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>

HER,

  • gennemgรฅr resultaterne af $authors-variablen og udskriver resultaterne i tabel
  • udskriver pagineringslinkene nederst i vores tabel.

Lad os nu starte vores ansรธgning og se resultaterne

I denne vejledning bruger vi den indbyggede PHP-webserver, men du kan bruge enhver webserver, der understรธtter PHP.

ร…bn terminalen

Kรธr fรธlgende kommando

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

HER,

  • Ovenstรฅende kommando browser til programkodebiblioteket og starter den indbyggede server pรฅ port 3000.

Bemรฆrk: applikationsstien skal matche stien, hvor du downloadede CodeIgniter. Til det kan du bruge et hvilket som helst portnummer, der er gratis pรฅ din computer. Det er ikke nรธdvendigt at bruge port 3000.

ร…bn webbrowseren og indlรฆs fรธlgende URL

http://localhost:3000/authors

Du bรธr vรฆre i stand til at fรฅ resultater svarende til fรธlgende

CodeIgniter pagineringscontroller

Resumรฉ

I denne tutorial har vi dรฆkket det grundlรฆggende i paginering og udnyttet pagineringsbiblioteket i CodeIgniter og brugte det til at oprette et program, der paginerer databaseresultater.

Opsummer dette indlรฆg med: