CodeIgniter’da sayfalandırma yapmak için pagination sınıfını kullanırız. Bu yazıdaki amacımız günlüğümüzü yazdığımız bir sitede, ekrana bastıracağımız günlük yazılarının sayfalandırılmasını sağlamak. Öncelikle controller dosyamız içinden (application/controllers/gunluk.php) ilgili saylandırma sınıfını çağırıyoruz. class Gunluk extends Controller {function Gunluk(){parent::Controller();}function index(){$this->load->library(‘pagination’);}} Böylelikle daha sonra bu sınıfın tüm olanaklarını kullanabiliriz. Şimdi controller dosyamız içinde bir sayfa değişkeninin okunması gerektiği için bu değişkenin kontrolünü yapalım:class Gunluk extends Controller {function Gunluk(){parent::Controller();}function index(){$this->load->library(‘pagination’);if(isset($_GET[‘sayfa’])) $sayfa = (int) $_GET[‘sayfa’];else $sayfa = “0”;}} Böylece controller dosyamız çalıştığında URL satırında gelen sayfa isimli değişkenin olup olmadığınu kontrol ediyoruz, varsa $sayfa isimli değişkene bu değeri atıyoruz. Bundan sonra model dosyamız (application/models/gunluk_model.php) içerisinden veritabanına bağlanarak günlüklerimizi listelemek ve maksimum günlük sayısını tespit etmektir.class Gunluk_model extends Model {function Gunluk_model(){parent::Model();}function gunluk_getir($sayfa=”0″){$query = $this->db->query(‘SELECT g.id, g.baslik, g.metin, g.tarihFROM gunluk gORDER BY g.tarih DESCLIMIT ‘.$sayfa.’,10′);$toplam = $this->db->get(‘gunluk’);if($query->num_rows() > 0){$result = array(‘gunluk’ => $query->result_array(),’toplam’ => $toplam->num_rows());return $result;}} Model içine yazılan yukarıdaki kod parçasında veritabanına bağlanırak, en sondan ilk başa doğru gönderme tarihine göre sıralanmış günlükler arasından 10 tanesi çekilmektedir. Ayrıca $toplam değişkeni ile de limitlendirme yapılmadan tüm günlük tablosunun veri adedi okutulmaktadır. Bundan sonraki adım, bu verilerin controller dosyası içine alınarak ekrana yansıtılmasıdır.class Gunluk extends Controller {function Gunluk(){parent::Controller();}function index(){$this->load->library(‘pagination’);if(isset($_GET[‘sayfa’])) $sayfa = (int) $_GET[‘sayfa’];else $sayfa = “0”;$this->load->model(‘gunluk_model’, ‘Model’);$data[‘gunluk_listesi’] = $this->Model->gunluk_getir($sayfa);$data[‘gunluk_listesi’][‘sayfa_listesi’] = $this->_config_pagination($data[‘gunluk_listesi’][‘toplam’]);$this->load->view(‘gunluk_view’,$data);}} Yukarıdaki controller dosyası içinde gunluk_model isimli dosya yüklendikten sonra, gunluk_getir metodunu çalışıtırılır. Bu metodun geri dönüşünden gelen içerik ve toplam sayfa sayısı gunluk_listesi adındaki diziye atanır. Bu aşamadan sonra ekrana bastıracağımız sayfa görünüşe ait stilleri hazırlamamız gerekir. Bunun için ilk defa digg.com sitesinde kullanılması nedeniyle “dig style” denilen formatta sayfa stili hazırlanır. Aşğıdaki css kodunu ayrı bir stil dosyası içine yazılabileceği gibi, ana sayfa içine de gömülebilir./* ——————————————– *//* Pagination: Digg Style *//* ——————————————– */#pagination-digg ul{border:0; margin:0; padding:0;}#pagination-digg li{display: inline;border:0 none;font-size:11px;list-style-image:none;list-style-position:outside;list-style-type:none;margin:0;padding:0;}#pagination-digg a{border:solid 1px #bbb;margin-right:2px;}#pagination-digg .next a,#pagination-digg .previous a {font-weight:bold;padding:3px 6px;}#pagination-digg .active{background:#336699 none repeat scroll 0 0;color:#FFFFFF;font-weight:bold;display:block;float:left;padding:6px 6px;}#pagination-digg a:link,#pagination-digg a:visited {color:#336699;display:block;float:left;padding:3px 6px;text-decoration:none;}#pagination-digg a:hover{border:solid 1px #380101;}
Bu aşamadan sonra ise yeniden controller dosyasına dönülerek sayfalandırma sınıfının konfigürasyon ayarının yapıldığı metod eklenir.function _config_pagination($toplam){$config[‘base_url’] = ‘?’;$config[‘per_page’] = ’10’;$config[‘query_string_segment’] = ‘sayfa’;$config[‘total_rows’] = $toplam;$config[‘full_tag_open’] = ‘

    ‘;$config[‘full_tag_close’] = ‘

‘;
$config[‘first_link’] = ‘İlk Sayfa’;$config[‘first_tag_open’] = ‘

‘;
$config[‘last_link’] = ‘Son Sayfa’;$config[‘last_tag_open’] = ‘

‘;
$config[‘next_link’] = ‘Sonraki’;$config[‘next_tag_open’] = ‘

‘;
$config[‘prev_link’] = ‘Önceki’;$config[‘prev_tag_open’] = ‘

‘;
$config[‘cur_tag_open’] = ‘

  • ‘;$config[‘cur_tag_close’] = ‘
  • ‘;
    $config[‘num_tag_open’] = ‘

  • ‘;$config[‘num_tag_close’] = ‘
  • ‘;
    $this->load->library(‘pagination’);$this->pagination->initialize($config);return $this->pagination->create_links();} Yukarıdaki metodta sayfalandırma konfigürasyonuna ait değerler yazılıdır. Bu kodda dikkat edilecek hususlardan biri $config[‘per_page’] değişkeni ile tanımlanan her sayfada kaç adet günlük göstereceğimizin tanıtıldığı sabit sayının (bu örnekte 10 sayısı), metod dosyasında çektiğimiz sorguda geçen limit değeri ile aynı olması gerektiği, diğeri ise $config[‘query_string_segment’] değişkeninde sonraki sayfa numarasını aktarmak için kullanılan değişken adının sayfa olması gerektiğidir.
    Ekrana görüntüyü bastırmak için ise view dosyasının (application/views/gunluk_view.php) içine controller dosyamızdan aktarılan değişkenlerden çekilen verilerin kullanılması yeterlidir.<h3>Günlük Yazılarım</h3><?foreach($gunluk_listesi[‘gunluk’] as $row) :?><p><?=$row[‘baslik’]?> | <?=$row[‘tarih’]?></p><p><?=$row[‘metin’]?></p><?endforeach;?><?if(isset($gunluk_listesi[‘sayfa_listesi’])) echo $gunluk_listesi[‘gunluk_listesi’];?> Bu yazıda anlatılan sayfa numaralandırması kodlarının uygulandığı, çalışan bir site görmek için codeigniter.gen.tr adresini ziyaret edebilirsiniz.