İndir

Bu yazımda veri tabanından çekilen verileri codeigniter pagination sınıfını kullanarak sayfalanmasını anlatacağım.

İlk olarak url yapımızdan bahsedeyim. Linklerimizin dizilimi controller/function/sayfa şeklinde olacak. Örnek verecek olursak http://localhost/CodeIgniter/index.php/sayfalama/index/5 linkinde sayfalama controller sayfamızın adı, index fonksiyonumuzun adı, 5 ise bizim veri tabanından kayıtları çekerken başlayacağımız kayıt numarası.

Uygulamamıza başlayabiliriz .

Model

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 yazilar adında bir tablomuz ve bu tablomuzun id, baslik adında 2 tane sütunu bulunmaktadır.

İndireceğiniz uygulama dosyası içinde sql dosyasını bulabilirsiniz

Aşağıdaki kodlar model dosyamızı oluşturmaktadır.

<?php

class Sayfalama_model extends Model{

    function __construct()
    {
        parent::Model();
    }

    function yazilar($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 yazilar_adet()
    {
        $sql = "SELECT COUNT(*) as adet FROM yazilar";
        $query = $this->db->query($sql);

        return (int)$query->row()->adet;
    }

}

Yazıları ç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.

Controller

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->yazilar_adet());
        $data['yazilar'] = $this->Model->yazilar($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();
    }

View

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( $yazilar ) : ?>

            <table id="table">
                <tr>
                    <th>ID</th>
                    <th>Başlık</th>

                </tr>

                <?php foreach( $yazilar 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>

Uygulamamız sonucunda oluşan sonuç :

Codeigniter Sayfalama

NOT : Eğer config dosyanızda $config['enable_query_strings'] = TRUE; şeklinde ayarlıysa page_query_string ayarını FALSE yapsak dahi codeigniter linklerimizi http://localhost/CodeIgniter/index.php/sayfalama/?per_page=5 şeklinde oluşturacaktır. Bu sorunu aşmak için system/libraries/pagination.php dosyasını açın ve aşağıdaki değişiklikleri yapın.

SATIR 125 eski hali :

if ($CI->config->item('enable_query_strings') === TRUE  OR $this->page_query_string === TRUE)

yeni hali :

if ($CI->config->item('enable_query_strings') === TRUE && $this->page_query_string === TRUE)

SATIR 175: eski hali :

if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)

yeni hali :

if ($CI->config->item('enable_query_strings') === TRUE && $this->page_query_string === TRUE)

İyi çalışmalar.

İndir