Merhaba Webkolog takipçileri!
Bugün sizlere web sitelerimizin olmazsa olmazlarından biri olan sayfalama (pagination) konusunu ele alacağım. Özellikle çok sayıda veriyi listeleyen blog gönderileri, ürün katalogları veya yorum sayfaları gibi alanlarda, tüm içeriği tek bir sayfada göstermek hem ziyaretçiler için karmaşık bir deneyim sunar hem de sunucu performansını olumsuz etkiler. İşte tam da bu noktada sayfalama imdadımıza yetişiyor! Bugün, 29 Ağustos 2015 tarihi itibarıyla güncel PHP sürümleriyle (PHP 5.x) uyumlu, basit ve etkili bir sayfalama yapısını nasıl kuracağımızı adım adım göreceğiz.
Neden Sayfalama Kullanmalıyız?
Sayfalama kullanmak için birkaç önemli neden var:
- Performans: Veritabanından bir anda binlerce hatta yüz binlerce kayıt çekmek, sunucunuz üzerinde ciddi bir yük oluşturur ve sayfa yükleme sürelerini uzatır. Sayfalama sayesinde sadece o an gösterilecek kadar veriyi çekerek bu yükü minimize ederiz.
- Kullanıcı Deneyimi: Uzun sayfalarda gezinmek, kullanıcılar için yorucu ve can sıkıcı olabilir. Sayfalama ile içerik parçalara bölünür, bu da daha düzenli ve kolay gezilebilir bir yapı sunar.
- Kaynak Tüketimi: Daha az veri çekmek, hem sunucu belleğini hem de veritabanı kaynaklarını daha verimli kullanmamızı sağlar.
Sayfalama Mantığı ve Temel Bileşenleri
Sayfalama işleminin temelinde, belirli bir sayfada kaç kayıt gösterileceğini ve bu kayıtların veritabanında nereden başlayıp nerede biteceğini belirlemek yatar. Bunun için genellikle aşağıdaki bilgilere ihtiyacımız var:
- Toplam Kayıt Sayısı: Veritabanındaki tablomuzda kaç adet kayıt olduğunu bilmeliyiz.
- Sayfalık Kayıt Limiti: Her sayfada kaç adet kayıt göstermek istediğimizi belirleriz (örneğin 10, 20, 50 kayıt).
- Mevcut Sayfa Numarası: Kullanıcının hangi sayfada olduğunu bilmeliyiz (genellikle URL'den
$_GET['sayfa']
ile alırız).
Bu bilgilerle birlikte, SQL sorgularımızda LIMIT
anahtar kelimesini kullanarak sadece ihtiyacımız olan kayıtları çekeceğiz.
PHP ile Sayfalama Yapımı
Şimdi gelelim kodlarımıza. Bu örnekte, MySQL veritabanıyla çalışacağız ve mysql_*
fonksiyonlarını kullanacağız. Ancak unutmayın, PHP 7 ve sonraki sürümlerinde bu fonksiyonlar kaldırılmıştır ve PDO veya MySQLi kullanmanız şiddetle tavsiye edilir. Yine de, 2015 yılındaki birçok proje için bu yöntem hala geçerliydi.
Öncelikle bir veritabanı bağlantımız olduğunu ve içerisinde kayıtlar bulunan bir tablo
adında bir tablomuz olduğunu varsayalım.
1. Sayfalama İçin Gerekli Değişkenleri Tanımlama
Sayfalama mekanizmasının çalışması için bazı temel değişkenleri hesaplamamız gerekiyor:
<?php
// Veritabanı bağlantısı (Örnek amaçlı, kendi bağlantı bilginizi girin)
$db_host = "localhost";
$db_user = "root";
$db_pass = "sifre"; // Kendi şifrenizi girin
$db_name = "deneme_db"; // Kendi veritabanı adınızı girin
$conn = mysql_connect($db_host, $db_user, $db_pass);
if (!$conn) {
die('Veritabanına bağlanılamadı: ' . mysql_error());
}
mysql_select_db($db_name, $conn);
mysql_query("SET NAMES 'utf8'"); // Karakter seti ayarı
// 1. Mevcut sayfa numarasını al
// Eğer sayfa numarası gelmiyorsa veya 1'den küçükse, varsayılan olarak 1. sayfayı göster
$sayfa = isset($_GET["sayfa"]) ? (int)$_GET["sayfa"] : 1;
if ($sayfa <= 0) $sayfa = 1;
// 2. Toplam kayıt sayısını bul
$rs = mysql_fetch_row(mysql_query("SELECT COUNT(id) FROM tablo"));
$toplam_kayit = $rs[0];
// 3. Her sayfada gösterilecek kayıt sayısı
$sayfalik_kayit = 10; // Her sayfada 10 kayıt göster
// 4. LIMIT için başlangıç noktasını hesapla (min_limit)
// (Sayfa Numarası - 1) * Sayfalık Kayıt Sayısı
$min_limit = ($sayfa - 1) * $sayfalik_kayit;
// 5. LIMIT için maksimum kayıt sayısını belirle (max_limit veya sayfalik_kayit)
$max_limit = $sayfalik_kayit; // LIMIT min_limit, max_limit olduğu için max_limit aslında çekilecek kayıt sayısıdır.
// 6. Toplam sayfa sayısını hesapla
// Toplam kayıt sayısını, sayfalık kayıt sayısına bölüp yukarı yuvarlarız (örneğin 10.1 sayfa = 11 sayfa)
$sayfa_sayisi = ceil($toplam_kayit / $sayfalik_kayit);
?>
2. SQL Sorgusunu Çalıştırma
Şimdi hesapladığımız $min_limit
ve $max_limit
değerlerini kullanarak veritabanından sadece o sayfaya ait kayıtları çekeceğiz:
<?php
// ... Yukarıdaki değişken tanımlamaları ve bağlantı kodu ...
// SQL sorgusu LIMIT ile
$sql = "SELECT * FROM tablo ORDER BY id DESC LIMIT $min_limit, $max_limit";
$sorgu = mysql_query($sql);
// Eğer sorguda hata varsa
if (!$sorgu) {
die('Sorgu hatası: ' . mysql_error());
}
echo "<h5>Sayfa " . $sayfa . " Kayıtları:</h5>";
echo "<ul>";
// Kayıtları döngüyle ekrana bas
while ($rs = mysql_fetch_assoc($sorgu)) { // mysql_fetch_assoc() ile sütun isimleriyle erişim daha kullanışlıdır
echo "<li>ID: " . $rs['id'] . " - Veri: " . $rs['veri_kolonu'] . "</li>"; // 'veri_kolonu' kendi tablonuzdaki bir sütun adı olmalı
}
echo "</ul>";
?>
3. Sayfalama Bağlantılarını Oluşturma
Son olarak, kullanıcıların sayfalar arasında geçiş yapabilmesi için sayfalama bağlantılarını oluşturmamız gerekiyor. Bu kısım, mevcut sayfaya ve toplam sayfa sayısına göre dinamik olarak değişir.
<?php
// ... Yukarıdaki tüm kodlar ...
echo "<h5>Sayfalar:</h5>";
echo "<div class='pagination'>";
// Önceki Sayfa bağlantısı
if ($sayfa > 1) {
echo "<a href='?sayfa=" . ($sayfa - 1) . "'>Önceki</a> ";
}
// Sayfa numaraları
for ($i = 1; $i <= $sayfa_sayisi; $i++) {
if ($i == $sayfa) {
echo "<b>" . $i . "</b> "; // Mevcut sayfayı kalın göster
} else {
echo "<a href='?sayfa=" . $i . "'>" . $i . "</a> ";
}
}
// Sonraki Sayfa bağlantısı
if ($sayfa < $sayfa_sayisi) {
echo "<a href='?sayfa=" . ($sayfa + 1) . "'>Sonraki</a>";
}
echo "</div>";
// Veritabanı bağlantısını kapat
mysql_close($conn);
?>
Bu yapıyı bir araya getirdiğimizde, web sitenizde basit ama etkili bir sayfalama sistemi elde etmiş olursunuz. Örneğin, bu kodu index.php
gibi bir dosyada çalıştırarak test edebilirsiniz. Ardından tarayıcınızda http://localhost/index.php?sayfa=2
gibi adreslerle farklı sayfalara gidebilirsiniz.
Sayfalama, kullanıcı deneyimini artırırken aynı zamanda sunucu kaynaklarınızı da optimize etmenin temel bir yoludur. Özellikle büyük veri kümeleriyle çalışıyorsanız, sayfalama uygulamanızın performansını doğrudan etkileyecektir.
Umarım bu makale, PHP ile sayfalama mantığını ve nasıl uygulanacağını anlamanıza yardımcı olmuştur. Unutmayın, güvenlik ve performans her zaman önceliğimiz olmalı!
Webkolog'u takipte kalın!
Hepinize bol kodlu ve keyifli öğrenme süreçleri dilerim!
0 yorum:
Yorum Gönder