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.
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
önceki yazı Php XCache Kullanımı |
sonraki yazı PHP ile mail göndermek |
Bu yazıda veritabanı bağlantısı konusunu anlatmamıştım. Eğer uygulamak isteyen arkadaşlar varsa önce CodeIgniter'da Veritabanı Ayarları yazımı okuyabilirsiniz.
Bu yazıda bahsetmem gerekirken atladığım bir noktayı bugün tespit ettik. COdeIgniter'da adres satırından bilgi alıp vermek için application/config/config.php dosyasında şu değişiklikleri yapmamız gereklidir:
application/config/config.php dosyasında yapılması gerekli değişiklikler :
|
|
Bu eksik bilgiyi tamamladığı için Raidenceviz'e teşekkürler ederim.
Evet bunun için akşamdan çok tırmalamıştım fatih buraya yazman çok faideli oldu :)
konuyla tam olarak alakalı değil belki ama kendi yaptığım numaralandırmada şöyle bir sorun oluyor. görünen numaralandırma şu şekilde:
1 2 3 4 >
bunlardan 1 hangi sayfada olursam olayım pasif halde, yani güncel sayfa halinden çıkmıyor. Diğer sayfa numaraları ise 2 şer artıyor, yani 2->4. sayfa, 3->4. sayfa, 4->6. sayfaya gidiyor. önceki linki ise hiç çıkmıyor.
controller dosyasındaki ayarlar şu şekilde:
$this->load->library('pagination');
$config['base_url'] = base_url().'index.php/site/contents/index';$config['per_page'] =2;
$config['total_rows'] = $this->db->count_all('contents');$this->pagination->initialize($config);
$this->data['contents'] = $this->model_ismi->getContentsList($config['per_page'],$this->uri->segment(4));
$this->data['pagination'] = $this->pagination->create_links();
$this->data['page'] ='contents';
$this->load->view('site/container',$this->data);
sorun neden olabilir?
Düzeltmne: CI manuel'i biraz karıştırınca sorunun nedenini buldum.
$config['uri_segment'] = 4; olarak ayarlamayı unutmuşum.
pillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.
Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.