PHP ile Sayfalama Yapımı ve Püf Noktaları

Kasım 29, 2015 günü yayımlanmış ve 0 yorum yapılmış      

PHP ile Sayfalama Yapımı ve Püf Noktaları


PHP derslerinde bir sonraki aşamaya geçiyoruz ve içerik çekmeyi gerçekten çok iyi bilen kodcu dostlarımız için sayfalandırma işlemini anlatıyoruz...


PHP ile sayfalandırma işi çoğu zaman ihtiyacımız olan bir şey. Yoğun içeriğin çekildiği kodlarda hem sunucuyu yormamak hem de kullanıcıya daha düzgün bir sayfa sunmak için sayfalama yapmak kaçınılmaz oluyor.

Sayfalandırma işlemi sandığınızın aksine çok basit bir işlem. Aslında yapmamız gereken tek şey MySQL sorgusuna LIMIT komutunu eklemek.

Örnek olarak elinizdeki bir sorgunun sonunda 'LIMIT 10' yazarsanız, yalnızca 10 içerik çektiğini görürsünüz.

Sayfalandırma yaparken buradaki komut şu şekle dönüyor temelde:

'LIMIT $başlangıç_satırı, $bitiş_satırı'

Buradaki satırdan kastımız MySQL tablosundaki satır. Yani hangi satırdan başlayacağız ve hangi satıra kadar çekeceğiz onu açıklıyor. Bunu yaptığımızda da zaten sayfalandırmayı başarmış oluyoruz :)

İkinci örneğimize geçelim. Şimdi elinizdeki bir sorguyu, aşağıdaki şekilde uyarlayın:

'SELECT id,baslik FROM yazilar ORDER BY id DESC LIMIT 0,10'

Bu sorguda yaptığımız şey, yazılar tablosunu son eklenenden başa doğru 0 ve 10 satırları arasında çekmek oldu. Bu sorguyu sitenizde, kendi tablo adınız ve kolon adlarınızla denerseniz çalıştığını göreceksiniz.

Şimdi gelelim asıl noktaya.

Gördüğümüz gibi olay LIMIT x,x kısmı. Olay da bu x,x değerlerini sorguya aktarabilmek. Bunu yapmak için de ihtiyacımız olan bazı şeyler var yani sayfalandırma yapmaya başlamadan önce bazı değerleri bilmemiz gerekiyor. Nedir bunlar:

1. Başlangıç satırı
2. Sayfa başına çekilecek satır sayısı
3. toplam satır sayısı
4. toplam sayfa sayısı (sayfa başına satır sayısı ve toplam satır sayısına göre)

Şimdi bu değerleri nasıl edineceğimizi anlatalım.

1. Başlangıç Satırı Edinelim


Başlangıç satırı LIMIT X,Y deki X'dir. Bunu sorguya aktarabilmek için de basit olarak $_GET kullanacağız. Ancak şuan için henüz sayfalandırmayı tamamlamadığımız (sayfa linklerini bastırmadığımız) için 0 değeri ile başlıyoruz.

Sonuç: $baslangic = 0;

2. Sayfa Başına Çekilecek Satır Sayısı Edinelim


Sayfa başına kaç içerik çekeceğinizi belirliyorsunuz basit olarak. Bunun için de aklınıza gelebilecek herhangi bir sayısal değer olur. Örnek olarak ben sayfa başına 10 içerik listelemek istiyorum.

Sonuç: $sayfabasina = 10;

3. Toplam Satır Sayısı Edinelim


Buna ihtiyaç duymamızın sebebi toplamda kaç sayfaya sahip olduğumuzu bulmak ve buna göre sayfa linklerini ekrana bastırmak. Girilen içerik başına veritabanında atıyorum config tablosunda toplamyazi = 50 gibi bir değer tutuyorsanız direk oradan alabilirsiniz. Tutmuyorsanız, birlikte count edelim :)

Sonuç:
$toplam = sql_sorgusu("select count(id) as toplam from yazilar");
$toplam = $toplam['toplam'];

4. Toplam Sayfa Sayısı Edinelim


Ve geldik son edineceğimiz değere. Bunu da basit olarak yine yukarıda yazdığım gibi toplam değeri sayfa başına sayıya bölerek edineceğiz. Burada dikkat etmemiz gereken nokta şu: Örnek olarak toplam sayımız 42 ise ve sayfa başına 10 içerik istiyorsak, bölme yaptığımızda 4.2 gibi bir değer gelir. Oysa ki burada bize gereken toplam sayfa sayısı 5 olacaktır. Son sayfamız da kalan son 2 içerik içindir anladığınız üzere. Bunu yapmak için şöyle bir komut kullanabilirsiniz.

Sonuç:
$sayfasayisi = $toplam/$sayfabasina;
if(stristr($sayfasayisi, "."))
{
    $sayfasayisi = explode(".", $sayfasayisi);
    $sayfasayisi = $sayfasayisi[0]+1;
}

Burada yaptığımız şey, sayfa sayısı nokta içeriyorsa noktadan böl ve +1 ekle işlemidir. Örneklendirmek gerekirse: 4.2 dönüyorsa, noktadan bölüyoruz ve elimizde dizenin ilk değeri olan 4 kalıyor. Buna da 1 ekleyerek sayfa sayımızı kalan son 2 içerik için 5'e arttırmış oluyoruz.

Nerede Kaldık?


Elimizdeki değişkenler şöyle:

$baslangic = 0;
$sayfabasina = 10;
$toplam = 55; (Bunu salladım, 55 içerik var toplam diyelim)
$sayfasayisi = 6; (yukaridaki işlemi yaptık ve 6 sayfa var diyelim)

Şimdi bu değerleri sayfalandırma için nasıl kullanacağımızı anlatalım. İlk olarak $baslangic ve $sayfabasina değişkenlerini kullanacağız. Bu sebeple de bu iki değişkenin, diziliş olarak sorguyu yaptığımız satırın üstünde olması önemli.

$sogru = sql_sorgusu('SELECT id,title from yazilar ORDER BY id DESC LIMIT $baslangic,$sayfabasina');

Sorguyu çektik ve değerlerimiz geldi. Ama elimizde iki değişken daha var. Peki bunları nasıl kullanacağız?

$toplam değişkeni, basit olarak aslında bir işe yaramıyor. Yani yarıyor ama yalnızca toplam sayfa sayısını belirlemek için bize gerekli. Toplam sayfa sayısını da şu şekilde ekrana bastırabiliriz artık:

for($i=0;$i<$sayfasayisi;$i++)
{
   $baslanacaksatir = $i*$sayfabasina;
   echo '<a href="yazilar.php?s='.$baslanacaksatir.'"></a>';
}

Bu işlemi yaptıktan sonra artık sayfalandırma işimiz neredeyse bitti sayılır :) Son olarak yukarıdaki döngüyü açıklayalım. For ile 0 dan toplam sayfa sayısı kadar link bastırdık ekrana. Bu linklere de s=$i şeklinde başlangıç değeri atadık. Değeri atarken $i değişkenini sayfa başına çekeceğimiz içerik ile çarptık. Böylece o satırdan başlamasını sağlayacağız çekme işleminin.

Bu aşamadan sonra yapacağımız son şey, bu $baslangic değişkenini de sorgumuza dahil etmek. Bunun için yine diziliş olarak sorguyu yaptığımız satırın üzerine şu kodu ekleyelim. Tabi $baslangic değeri için atadığımız sıfır da artık önemli değil. Yani aşağıdaki kodu $baslangic = 0; yazdığımız yer ile değiştireceğiz artık.

$baslangic = intval(@$_GET['s']) ?: 0;

Bunu yaptıktan sonra işimiz bitti demektir. Tebrikler, php sayfalandırma işlemini tamamladınız :)


Aklınıza takılan herhangi bir şey varsa sormaktan çekinmeyin diyelim ve yazıyı sonlandıralım.

Facebook'da Takip Edin!

 

İlginizi Çekebilecek Diğer Konular

 


Logaster - Ücretsiz Online Logo                
 
KATEGORİLER
BENZER YAZILAR
 
SON YORUMLAR
 
TRANSLATE BLOG
SOSYAL MEDYA