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>
