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.
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
Ö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ı.