Beyaz.Net İpucu
Codeigniter ile Veritabanı Kayıtlarını Sayfalama
Bu yazımda veri tabanından çekilen verileri codeigniter pagination sınıfını kullanarak sayfalanmasını anlatacağım.
İlk olarak MODEL kısmından başlayalım.
sayfalama_model.php adında yeni bir Model dosyası oluşturuyoruz. Model dosyamızda veri tabanından verileri çeken ve veri tabanındaki verilerin adetini bize veren 2 adet fonksiyonumuz olacak. Veri tabanımızda uyeler adında bir tablomuz ve bu tablomuzun id, baslik adında 2 tane sütunu bulunmaktadır.
Aşağıdaki kodlar model dosyamızı oluşturmaktadır.
<?php class Sayfalama_model extends Model{ function __construct() { parent::Model(); } function uyeler($baslangic, $limit) { $sql = "SELECT * FROM yazilar ORDER BY id DESC LIMIT ?, ?"; $query = $this->db->query( $sql, array((int)$baslangic, (int)$limit) ); if( $query->num_rows() > 0 ) { return $query->result_array(); } else { return FALSE; } } function uyeler_adet() { $sql = "SELECT COUNT(*) as adet FROM uyeler"; $query = $this->db->query($sql); return (int)$query->row()->adet; } }
Yukarıdaki model kodumuzda üyeleri çeken sorgumuzu bind query ile yaptık böylece otomotik olarak escape işlemi yaptık ayrıca parametre olarak gelen $baslangic ve $limit int tipine dönüştürerek urlde string olması durumuna karşılık önlemimizi almış olduk.
Şimdi CONTROLLER kısmına geçelim.
sayfalama.php adında yeni bir controller oluşturuyoruz. Controller dosyasında yapılacaklar :
- Controller dosyamızda veri tabanındaki kayıtları url den gelen numaraya göre çekeceğiz.
- Veri tabanındaki kayıtları her sayfada 3 adet kayıt olacak şekilde sayfalandıracağız.
Controller dosyamızın içeriği :
<?php class Sayfalama extends Controller{ function __construct() { parent::Controller(); } function index() { $this->load->Model('sayfalama_model', 'Model'); $data['sayfalama_linkleri'] = $this->sayfalama_linkleri($this->Model->uyeler_adet()); $data['uyeler'] = $this->Model->uyeler($this->uri->segment(3,0),5); $this->load->view('sayfalama_view', $data); } function sayfalama_linkleri($toplam) { $this->load->library('pagination'); $config = array( 'base_url' => site_url('sayfalama/index'), 'total_rows' => $toplam, 'per_page' => 3, 'num_links' => 2, 'page_query_string' => FALSE, 'uri_segment' => 3, 'full_tag_open' => '<div class="pagination">', 'full_tag_close' => '</div>', 'first_link' => 'İlk Sayfa', 'first_tag_open' => '', 'first_tag_close' => '', 'last_link' => 'Son Sayfa', 'last_tag_open' => '', 'last_tag_close' => '', 'next_link' => 'Sonraki', 'next_tag_open' => '', 'next_tag_close' => '', 'prev_link' => 'Önceki', 'prev_tag_open' => '', 'prev_tag_close' => '', 'cur_tag_open' => '<span class="current">', 'cur_tag_close' => '</span>', 'num_tag_open' => '', 'num_tag_close' => '' ); $this->pagination->initialize($config); return $this->pagination->create_links(); }
VİEW dosyamıza geçelim.
Kayıtları ve sayfalama linklerini view dosyamızda yazdıracağız. sayfalama_view.php adında yeni bir view dosyası oluşturun ve aşağıdaki kodları view dosyasına ekleyin.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <style type="text/css"> a{color:#21759B;text-decoration:none;} #table th{background:#eee;padding:5px;text-align:left; vertical-align: top; } #table td{padding:5px; border-bottom: 1px solid #c3c3c3; vertical-align: top; } #table{ -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; width:500px; border:1px solid #c3c3c3;} #table tr:hover{ background: #bed9ee;} .pagination{margin-top:20px;} .pagination a, .pagination span{background: #fff;padding:5px;margin:2px;border:1px solid #d9d9d9;font-weight: bold;text-decoration:none;-moz-border-radius:3px;-webkit-border-radius: 3px;} </style> </head> <body> <?php if( $uyeler ) : ?> <table id="table"> <tr> <th>ID</th> <th>Başlık</th> </tr> <?php foreach( $uyeler as $dizi ) : ?> <tr> <td style="width: 10%;"><?php echo $dizi['id']; ?></td> <td><a href="#"><?php echo $dizi['baslik']; ?></a></td> </tr> <?php endforeach; ?> </table> <?php echo $sayfalama_linkleri; ?> <?php endif; ?> </body> </html>