Codeigniter'da Adım Adım Örnekle Sayfalandırma

Veritabanları yaşayan varlıklardır. Zaman geçtikçe büyürler. Uygulamaları tasarlarken kullanıcıların göz atması gereken birçok kaydı hesaba katmamız gerekir. Sayfalandırma, sonuçlarımızı küçük, yönetilebilir parçalara ayırmamızı sağlar. Aşağıdaki resim, Google aramasında sayfalandırmanın bir örneğini göstermektedir.

Codeigniter'da sayfalandırma

Bu eğitimde, CodeIgniter'da sayfalandırma kitaplığını kullanarak veritabanı sonuçlarını nasıl sayfalandıracağınızı öğreneceksiniz. Bu eğitimde CodeIgniter Active Record'un temellerine aşina olduğunuz varsayılmaktadır. Bunu yapmazsanız önceki eğitimleri okuyabilirsiniz. Yapılan diğer varsayım, CodeIgniter'ı zaten indirmiş olduğunuzdur.

Veritabanı yapılandırması

Veritabanını oluşturarak ve içine bazı sahte kayıtları ekleyerek başlayacağız. Üzerinde 50 kayıt bulunan tek tablolu bir veritabanı olacaktır.

Aşağıdaki betiği çalıştırın MySQL veritabanı yazarları tablosunu oluşturmak için. 50 sahte kayıt ekleyin.

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');

Artık veritabanımızı başarıyla oluşturduğumuza ve içine sahte kayıtlar yerleştirdiğimize göre, CodeIgniter uygulamamızı veritabanıyla iletişim kuracak şekilde yapılandıralım.

application/config/database.php dosyasını açın

Veritabanı bağlantı parametrelerini aşağıdakine benzer şekilde ayarlayın

$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
);

İŞTE,

  • 'hostname' => 'localhost', veritabanının ana bilgisayar adını ayarlar
  • 'kullanıcı adı' => 'root', veritabanı adını belirtir
  • 'password' => 'openseseme', veritabanı şifresini ayarlar
  • 'database' => 'ci_pagination', veritabanı adını belirtir.

Uygulamamız başladığında veritabanı kütüphanesini de otomatik olarak yüklemiş olacağız. Hadi bunu yapalım. application/config/autoload.php dosyasını açın

Veritabanı kitaplığını aşağıdaki kodda gösterildiği gibi yükleyin

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

Veritabanı yapılandırması için bu kadar.

Şimdi sayfalama için veritabanı modeli üzerinde çalışalım

CodeIgniter Sayfalandırma Veritabanı Modeli

Uygulama/modellerde yeni bir model Authors_model oluşturun

Aşağıdaki kodu ekleyin

<?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();
    }
}

İŞTE,

  • korumalı $tablo = 'yazarlar'; model için veritabanı tablosu adını tanımlayan korumalı bir değişken tanımlayın
  • public function __construct() {…} ana yapıcı metodunu çağırır
  • public function get_count() {…} veritabanı tablosundaki toplam kayıtları döndürür. Bu sayfalama amaçları için bir ihtiyaçtır
  • public function get_authors($limit, $start) {…}, veritabanından sayfalandırılmış sonuçları almak için kullanılacak bir yöntemi tanımlar. Limit ve başlangıç ​​noktasından geçeceğiz. Limit, döndürülecek toplam kayıt sayısını tanımlarken başlangıç, atlanması gereken kayıt sayısını tanımlar.

veritabanı modelimiz için bu kadar. Şimdi sayfalandırılmış sonuçlarımıza yanıt verecek rotaları oluşturalım.

CodeIgniter Sayfalandırma Rotaları

Routes dosyasını application/config/routes.php dosyasında açın.

Aşağıdaki rotayı ekleyin

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

İŞTE,

  • Sayının isteğe bağlı bir parametresini kabul eden bir rota yazarı tanımlarız. İsteğe bağlı parametre, açılış ve kapanış parantezleri kullanılarak tanımlanır. Tanımlanan rota, Authors denetleyicisindeki dizin yöntemini çağırır.

Şimdi sayfalandırılmış sonuçlarımız için denetleyiciye geçelim

CodeIgniter Sayfalandırma Denetleyicisi

application/controllers dizininde yeni bir Authors.php dosyası oluşturun

Aşağıdaki kodu ekleyin

<?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);
    }
}

İŞTE,

  • Authors sınıfı CI_Controller'ı genişletir {…} CI_Controller sınıfını genişleten Authors sınıfını tanımlarız
  • public function __construct() {…} bu yöntem ana kurucuyu başlatır ve url yardımcısını, yazar modelini ve sayfalandırma kitaplığını yükler.
  • public function index() {…} rota yazarlarımıza yanıt veren yöntemi tanımlar
    • $config[“base_url”] = base_url() . “yazarlar”; sayfalandırma bağlantıları oluşturmak için kullanılacak sayfalandırma URL'sini ayarlar
    • $config[“total_rows”] = $this->authors_model->get_count(); sayfalara ayrılması gereken toplam satırı ayarlar. Değer, get_count yöntemi çağrılarak yazarların modelinden alınır.
    • $config[“sayfa başına”] = 10; sayfa başına görüntülenmesi gereken satırları tanımlar
    • $config[“uri_segment”] = 2; kayıtları atlamak için kullanılacak değeri içeren URL segmentini belirtir
    • $this->pagination->initialize($config); tanımladığımız ve yukarıdaki değerleri atadığımız config array değerini kullanarak sayfalandırma kütüphanesini başlatır.
    • $sayfa = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; URI'nin ikinci bölümünde atlama numarasının ayarlanıp ayarlanmadığını kontrol eder ve ayarlanmadıysa $page değişkenine 0 değeri atanır
    • $veri[“bağlantılar”] = $this->pagination->create_links(); sayfalandırma bağlantılarını oluşturur ve bunları $data dizi değişkeninin bağlantılar anahtarına atar.
    • veri['yazarlar'] = $this->authors_model->get_authors($config[“sayfa başına”], $sayfa); sayfalandırılmış yazarların kayıtlarını aldı ve bunları $data dizi değişkeninin yazarlar anahtarına atadı
    • $this->load->view('yazarlar/dizin', $veri); Dizin görünümünü yazarlar dizinine yükler ve $data dizi değişkenine iletir.

Modelimiz için bu kadar. Şimdi veritabanı sonuçlarımızı görüntüleyecek view’ı oluşturalım.

Uygulamada/görünümlerde yeni bir dizin yazarları oluşturun

application/views/authors/index.php dosyasında yeni bir index.php dosyası oluşturun

Aşağıdaki kodu ekleyin

<!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>

İŞTE,

  • $authors değişkeninin sonuçları arasında döngü yapar ve sonuçları tabloya yazdırır
  • sayfalandırma bağlantılarını tablomuzun altına yazdırır.

Şimdi uygulamamıza başlayalım ve sonuçları görelim

Bu derste, yerleşik PHP web sunucusunu kullanıyoruz, ancak siz bunu destekleyen herhangi bir web sunucusunu kullanabilirsiniz. PHP.

Terminali aç

Aşağıdaki komutu çalıştırın

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

İŞTE,

  • Yukarıdaki komut uygulama kodu dizinine göz atar ve yerleşik sunucuyu 3000 numaralı bağlantı noktasında başlatır.

Not: Uygulama yolunun CodeIgniter'ı indirdiğiniz yolla eşleşmesi gerekir. Bunun için bilgisayarınızda boş olan herhangi bir port numarasını kullanabilirsiniz. 3000 numaralı bağlantı noktasını kullanmanıza gerek yoktur.

Web tarayıcısını açın ve aşağıdaki URL'yi yükleyin

http://localhost:3000/authors

Aşağıdakine benzer sonuçlar elde edebilmelisiniz

CodeIgniter Sayfalandırma Denetleyicisi

ÖZET

Bu derste, sayfalandırmanın temellerini ele aldık ve sayfalama kitaplığının avantajlarından yararlandık. CodeIgniter ve bunu veritabanı sonuçlarını sayfalandıran bir uygulama oluşturmak için kullandı.