Codeigniter da örneğin bir blog veya haber sayfası gibi bir sayfa yaptınız. Kullanıcı bir yazınıza tıkladığında yazı altında önceki ve sonraki yazıyı göstermek isteyebilirsiniz. Bu işlemi yapmak için size mantığı anlatıp birde örnek kod vereceğim.
Bu işlem de öncelikle veri tabanınızda bir tarih alanı olacak yazılarınızı neye göre listeliyorsanız o tarih alanını baz alarak bu işlemleri yapacağız. Tarih kullanmayıp sadece Id gibi bir alanıda kullanabilirsiniz bu size kalmış ama yazılarda yayınlanma tarihi genelde eklendiği ve bende eklediğim için tarih üzerinden işlemleri gerçekleştirdim.
Bu kodlar Database Model içerisindedir.
function next_post($date){ $this->db->select('Id, title'); $this->db->from('blog');; $this->db->where('status','1'); $this->db->where('date >',$date); $this->db->order_by('date', 'ASC'); $this->db->limit(1); $query = $this->db->get(); return $query->result(); }
function prev_post($date){ $this->db->select('Id,title'); $this->db->from('blog'); $this->db->where('status','1'); $this->db->where('date <',$date); $this->db->order_by('date', 'DESC'); $this->db->limit(1); $query = $this->db->get(); return $query->result(); }
Şimdi kodların ana kısımları yukarıda görüldüğü gibi bende 2-3 tablo birbirine bağlı şekilde veri alınıyor ama sizin kafanızı karıştırmasın diye tek tablo şeklinde yaptım eğer başka tablodan da veri alıyorsanız join kullanarak diğer tablodan da veri alabilirsiniz.
Önceki ve sonraki yazı için 2 farklı fonksiyon kullandım bunları database modelimin içine ekledim. Sayfada aktif olarak gösterdiğiniz yazının tarihini alıyor ve fonksiyona yolluyoruz. Sonrasında tablodan diğer yazıları kontrol ediyoruz. Ben koda $this->db->where(‘status’,’1′); kısmını ekledim çünkü mesela yazılarınız taslakta olabilir. Siz taslak veya yayınlandı olarak yazılarınızı tutuyorsanız. Taslak olan yazıya gidilmesini istemezsiniz bu nedenle taslak yazıyı atlamak için bu kısmı ekledim.
Sonrasında tarih verisine göre sonraki ve önceki yazıları sıralayıp ve sonrasında veya öncesinde gelen satırları alıyorum ve limit 1 değeri ekledim çünkü bize sadece 1 yazı gerekli.
Sonrasında controller içerisine sayfayı bastığınız fonksiyona şu kodları ekleyin;
$data["next"] = $this->Database_Model->next_post($data["post"][0]->date); $data["prev"] = $this->Database_Model->prev_post($data["post"][0]->date);
$data[“post”][0]->date bu kod sayfaya basılan yazının tarihidir. Sonrasında view klasörünüz de sayfa dosyanızı açın ve gerekli yere şu kodları kendinize göre düzenleyip ekleyin.
<div class="row"> <div class="col-md-12"> <?php if(count($prev)>0 && count($next)>0) { ?> <div class="col-md-6" style="float:left;"> <a href="<?=base_url()?>blog/read/<?=$prev[0]->Id?>">Önceki Yazı<br><?=substr($prev[0]->title,0,35)?></a> </div> <div class="col-md-6" style="float:right;"> <a href="<?=base_url()?>blog/read/<?=$next[0]->Id?>" style="float:right;">Sonraki Yazı</a><br> <a href="<?=base_url()?>blog/read/<?=$next[0]->Id?>" style="float:right;"><?=substr($next[0]->title,0,35)?></a> </div> <?php } else if(count($next)>0) { ?> <a href="<?=base_url()?>blog/read/<?=$next[0]->Id?>" style="float:right;">Sonraki Yazı</a><br> <a href="<?=base_url()?>blog/read/<?=$next[0]->Id?>" style="float:right;"><?=substr($next[0]->title,0,35)?></a> <?php } else if(count($prev)>0) { ?> <a href="<?=base_url()?>blog/read/<?=$prev[0]->Id?>">Önceki Yazı<br><?=substr($prev[0]->title,0,35)?></a> <?php } ?> </div> </div>
Ve sonuç…
Yukarıda gördüğünüz kodlar şuan aktif geliştirdiğim projenin kodlarıdır. Kodlar size örnek olması açısından ekledim. Kendi projenizde kurduğunuz yapıya göre değişiklikler yapıp kullanabilirsiniz. Aslında buradaki mantığı farklı platformlar içinde uygulayabilirsiniz çünkü veritabanı kodu yazıyorsunuz temelde ve bu koda göre çıktı alıyorsunuz. Aklınıza takılan bir yer varsa yorumlara yazın geri dönüş yaparım.
ben dizi sitesi yapıyorum her şey tamam ama sonraki bölüm önceki bölümü nasıl yapacağımı bilmiyorum yardımcı olursanız sevinirim.
Selamlar,
Geç yazdığım için kusura bakma. Sorununa gelecek olursak;
Dizilerde bir alt kategori mantığı ile gidiyorsundur muhtemelen diye tahmin ediyorum. Dizilerin adının bulunduğu bir tablo ve dizinin bölümlerinin tutulduğu ve dizi idsini aldığı 2. bir tablo. Dizileri zaten bölüm bölüm ekliyorsundur. Yani mesela A dizisini ekledin idsi 1 onu bölümleri eklediğin tabloda dizi_id=1 bolum=1, dizi_id=1 bolum=2 şeklinde eklemeye devam ediyorsundur. Yukarıdaki ileri geri kodlarına ek olarak bir where daha ekleyip dizi_id =1 şeklinde bir ekleme yaptığında o dizi için hangi bölümde isen önceki ve sonraki kayda gidebilirsin.