Codeigniter Önceki ve Sonraki Yazı Eklentisi Yapımı

tarafından
74
Codeigniter Önceki ve Sonraki Yazı Eklentisi Yapımı

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.