Hatırlarsanız önceki derslerimizde PHP ve MYSQL ile sayfalama işlemi yapmıştık. Bu dersimizde sayfalama işlemini kolaylaştırmak için yazdığım kütüphaneyi tanıtmak istiyorum. Kütüphane ile hazırlayacağınız sayfalamayı istediğiniz gibi özelleştirebilirsiniz. Az kod yazarak küçük ayarlarla bootstrap4 ve bootstrap3'e uyumlu hale getirebilirsiniz. Ayrıca dersin sonunda kütüphaneyi kullanarak PDO ve MySQL ile örnek bir uygulama yapıcağız (örneğe geçmek için tıklayın). İsterseniz hemen kullanımına geçelim .
Öncelikle kütüphanemizi github üzerinden indirelim. (Github linki için tıklayın) İndirme işlemi bittikten sonra indirdiğimiz zip dosyasını açalım ve "src" klasörü içerisindeki "pagination.class.php" dosyasını alıp sayfamıza dahil edelim.
require_once "src/pagination.class.php";
Artık sayfalama sınıfımızı kullanmaya hazırız . Ayrıca isterseniz zip dosyasındaki "examples" klasörü içerisindeki örneklerede bakabilirsiniz.
Kullanımı
$page = isset($_GET["page"]) ? intval($_GET["page"]) : 1; // Tarayıcıdan sayfa bilgisini alıyoruz. (Sonradan ekliyebileceğiniz ayar ile sef linke uygun yapabilirsiniz. örn: example.com/test/2 )
$config = [
"url" => "http://localhost/pagination/test.php", // Sayfalama linkleri oluşturulurken kullanılacak url.
"total" => 10, // Toplam veri sayısı
"per_page" => 2, // Her sayfada kaç tane veri gösterileceğini yazıyoruz.
"current_page" => $page // Aktif sayfa
];
// Sayfalama sınıfına ayarlarımızı gönderip çalıştırıyoruz
// 2.parametre belirterek bootstrap3'e ve bootstrap4'e uyumlu hale getirebiliriz.
// bootstrap4 => bs4,
// bootstrap3 => bs3
$pagination = new Pagination($config);
echo $pagination->create(); // Linklerimizi oluşturuyoruz
Sınıfın en basit haliyle kullanımı bu şekilde şimdi sınıfı nasıl özelleştirebileceğimize bakalım.
Sayfalama ayarları
Sayfa numarasının gönderildiği get parametresinin ismini değiştirmek
// örn:example.com/test.php?sayfa=2
$config["query_string_name"] = "sayfa";
Sef link şeklinde linklendirme
// örn:example.com/test/2
$config["query_string"] = false;
İlk ve son linklerini gizlemek
$config["first_last_page"] = false;
Sonraki ve önceki linklerini gizlemek
$config["prev_next"] = false;
Özelleştirmeler
Sayfalama açılış etiketi (Sayfalama linkleri oluşmadan önce eklemek istediğiniz kodlar)
$config["open"] = "<div class='sayfalama'>"; // Açılış etiketi
Sayfalama kapanış etiketi (Sayfalama linkleri oluşturulduktan sonra eklemek istediğiniz kodlar)
$config["close"] = "</div>"; // Açılış etiketimizi kapatıyoruz
Sayfa numaralarını özelleştirme
// Değerler belirtilmezse varsayılan değerler alınacaktır.
$config["page"] = [
"before"=>"<li>", // Sayfa numara linklerinden önce eklenecek kodlar. (varsayılan değer : "")
"after"=>"</li>", // Sayfa numara linklerinden sonra eklenecek kodlar. (varsayılan değer : "")
"content"=>"(:num). sayfa", // Sayfa numara linkinde yazılacak yazı. (:num) kısmını otomatik olarak sayıya çevirir. (varsayılan değer : "(:num)")
"attr"=>["class"=>"deneme"] // Sayfa numara linkine vermek istediğiniz özellikler (varsayılan değer : [])
];
Aktif sayfa linkini özelleştirme
// Değerler belirtilmezse varsayılan değerler alınacaktır.
$config["cur_page"] = [
"before"=>"<li>", // Aktif sayfa linkinden önce eklenecek kodlar. (varsayılan değer : "")
"after"=>"</li>", // Aktif sayfa linkinden sonra eklenecek kodlar. (varsayılan değer : "")
"content"=>"(:num). sayfa", // Aktif sayfa linkinde yazılacak yazı. (:num) kısmını otomatik olarak sayıya çevirir. (varsayılan değer : "(:num)")
"attr"=>["class"=>"deneme"] // Aktif sayfa linkine vermek istediğiniz özellikler (varsayılan değer : [])
];
İlk sayfaya yönlendiren linki özelleştirme
// Değerler belirtilmezse varsayılan değerler alınacaktır.
$config["first_page"] = [
"before" => "<li>", // İlk sayfaya yönlendiren linkten önce eklenecek kodlar. (varsayılan değer : "")
"after" => "</li>", // İlk sayfaya yönlendiren linkten sonra eklenecek kodlar. (varsayılan değer : "")
"content" => "‹ İlk", // İlk sayfaya yönlendiren linkte yazılacak yazı. (varsayılan değer : "‹ İlk")
"attr" => [] // İlk sayfaya yönlendiren linke vermek istediğiniz özellikler (varsayılan değer : [])
];
Son sayfaya yönlendiren linki özelleştirme
// Değerler belirtilmezse varsayılan değerler alınacaktır.
$config["last_page"] = [
"before" => "<li>", // Son sayfaya yönlendiren linkten önce eklenecek kodlar. (varsayılan değer : "")
"after" => "</li>", // Son sayfaya yönlendiren linkten sonra eklenecek kodlar. (varsayılan değer : "")
"content" => "Son ›", // Son sayfaya yönlendiren linkte yazılacak yazı. (varsayılan değer : "Son ›")
"attr" => [] // Son sayfaya yönlendiren linke vermek istediğiniz özellikler (varsayılan değer : [])
];
Önceki sayfaya yönlendiren linki özelleştirme
// Değerler belirtilmezse varsayılan değerler alınacaktır.
$config["prev_page"] = [
"before" => "<li>", // Önceki sayfaya yönlendiren linkten önce eklenecek kodlar. (varsayılan değer : "")
"after" => "</li>", // Önceki sayfaya yönlendiren linkten sonra eklenecek kodlar. (varsayılan değer : "")
"content" => "< Önceki", // Önceki sayfaya yönlendiren linkte yazılacak yazı. (varsayılan değer : "<")
"attr" => [] // Önceki sayfaya yönlendiren linke vermek istediğiniz özellikler (varsayılan değer : [])
];
Sonraki sayfaya yönlendiren linki özelleştirme
// Değerler belirtilmezse varsayılan değerler alınacaktır.
$config["next_page"] = [
"before" => "<li>", // Sonraki sayfaya yönlendiren linkten önce eklenecek kodlar. (varsayılan değer : "")
"after" => "</li>", // Sonraki sayfaya yönlendiren linkten sonra eklenecek kodlar. (varsayılan değer : "")
"content" => "Sonraki >", // Sonraki sayfaya yönlendiren linkte yazılacak yazı. (varsayılan değer : ">")
"attr" => [] // Sonraki sayfaya yönlendiren linke vermek istediğiniz özellikler (varsayılan değer : [])
];
Tema seçme
Sayfalama sınıfını oluştururken göndereceğimiz 2.parametre ile bootstrap4 veya bootstrap3 ile uyumlu hale getirebiliriz. Bu özellik önceki başlıkta bulunan özelleştirme işlemlerini seçtiğiniz temaya göre düzenler.
Bootstrap4 uyumlu hale getirme
$config = [
"url" => "http://localhost/pagination/test.php", // Sayfalama linkleri oluşturulurken kullanılacak url.
"total" => 10, // Toplam veri sayısı
"per_page" => 2, // Her sayfada kaç tane veri gösterileceğini yazıyoruz.
"current_page" => $page // Aktif sayfa
];
$pagination = new Pagination($config, "bs4");
Bootstrap3 uyumlu hale getirme
$config = [
"url" => "http://localhost/pagination/test.php", // Sayfalama linkleri oluşturulurken kullanılacak url.
"total" => 10, // Toplam veri sayısı
"per_page" => 2, // Her sayfada kaç tane veri gösterileceğini yazıyoruz.
"current_page" => $page // Aktif sayfa
];
$pagination = new Pagination($config, "bs3");
İsterseniz temanın ayarlarınıda bir önceki özelleştirme başlığında anlatıldığı gibi özelleştirebilirsiniz.
$config["last_page"] = [
"content"=>"Son sayfa"
];
PDO MySQL sayfalama örneği
Şimdi daha önceki derslerimizde yaptığımız sayfalama örneğini sınıfımız aracılığıyla yapıcağız. Biz örneğimizde bootstrap4 temasını kullanacağız siz önceki başlıklarda anlattığımız şekilde kendinize uygun şekilde düzenleyebilirsiniz. İlk olarak örneğimizde kullanacağımız SQL kodlarını veritabanımıza yükleyelim.
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
CREATE TABLE `icerikler` (
`id` int(11) NOT NULL,
`baslik` varchar(225) NOT NULL,
`icerik` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `icerikler` (`id`, `baslik`, `icerik`) VALUES
(1, 'PHP dersleri', 'PHP dersleri içeriği burada olacak.'),
(2, 'CSS dersleri', 'CSS dersleri içeriği burada olacak.'),
(3, 'Javascript dersleri', 'Javascript dersleri içeriği burada olacak.'),
(4, 'C# dersleri', 'C# dersleri içeriği burada olacak.'),
(5, 'Java dersleri', 'Java dersleri içeriği burada olacak.'),
(6, 'NodeJs dersleri', 'NodeJs dersleri içeriği burada olacak.'),
(7, 'Python dersleri', 'Python dersleri içeriği burada olacak.'),
(8, 'C++ dersleri', 'C++ dersleri içeriği burada olacak.'),
(9, 'Visual Basic dersleri', 'Visual Basic dersleri içeriği burada olacak.'),
(10, 'RUBY dersleri', 'RUBY dersleri içeriği burada olacak.'),
(11, 'Go dersleri', 'Go dersleri içeriği burada olacak.'),
(12, 'Objective-c dersleri', 'Objective-c dersleri içeriği burada olacak.'),
(13, 'Swift dersleri', 'Swift dersleri içeriği burada olacak.'),
(14, 'Asp.net dersleri', 'Asp.net dersleri içeriği burada olacak.'),
(15, 'Sql dersleri', 'Sql dersleri içeriği burada olacak.');
ALTER TABLE `icerikler`
ADD PRIMARY KEY (`id`);
ALTER TABLE `icerikler`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=16;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Örneğimizde kullanacağımız sql dosyasını yükledikten sonra, php dosyamızı açıp aşağıdaki kodlarımızı yazalım. (Örnekte kullanılan php dosyasının adı "test.php"'dir.) Kodların yanlarında gerekli açıklamalar yapılmıştır.
<?php
require_once "src/pagination.class.php"; // Kütüphanemizi sayfamıza dahil edelim
$sayfa = isset($_GET["page"]) ? intval($_GET["page"]) : 1; // Tarayıcıdan get ile sayfa bilgimizi alıyoruz
// Veritabanı bağlantımızı yapıyoruz, bilgileri kendinize göre düzenleyebilirsiniz.
try {
$db = new PDO("mysql:host=localhost;dbname=veriler;charset=utf8", "root", "");
} catch (PDOException $error) {
die($error->getMessage());
}
// Sayfalamaya göndermek için tablomuzda kaç tane veri olduğunu buluyoruz.
$toplam = $db->query("SELECT count(*) FROM icerikler")->fetchColumn();
$sayfalama_ayarlar = [
"url" => "http://localhost/pagination/test.php", // Sayfalama linkleri oluşturulurken kullanılacak url.
"total" => $toplam, // Tablodaki toplam veri sayısını gönderiyoruz
"per_page" => 2, // Her sayfada kaç veri gösterileceğini yazıyoruz.
"current_page" => $sayfa, // Şuan kaçıncı sayfada olduğumuzu yazıyoruz.
];
$sayfalama = new Pagination($sayfalama_ayarlar, "bs4"); // Sayfalama sınıfımızı Bootstrap4 temasını seçerek çalıştırıyoruz.
$limit = $sayfalama->getLimit(); // Verileri listeletirken sorgumuza göndereceğimiz limit değerini buluyoruz.
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<title>Bootstrap 4 Sayfalama örneği - Web Derslerim</title>
</head>
<body>
<div class="container">
<h1 style="text-align: center;"><a href="http://www.webderslerim.com/" target="_blank">Web Derslerim</a></h1>
<ul class="list-group list-group-flush">
<?php
$veriler = $db->prepare("SELECT * FROM icerikler LIMIT :basla, :bitir"); // İçerikler tablosundan verileri limit kullanarak çekiyoruz.
$veriler->bindValue(":basla", $limit, PDO::PARAM_INT); // basla parametresine sayfalama sınıfı ile bulduğumuz limit değerini gönderiyoruz.
$veriler->bindValue(":bitir", $sayfalama_ayarlar["per_page"], PDO::PARAM_INT); // bitir parametresine sayfada kaç veri gösterileceğini gönderiyoruz.
$veriler->execute(); // Sorgumuzu çalıştırıyoruz
foreach ($veriler->fetchAll(PDO::FETCH_OBJ) as $veri) { // Verilerimizi listeletiyoruz.
?>
<li class="list-group-item"><b><?php echo $veri->baslik; ?></b> - <?php echo $veri->icerik;?></li>
<?php
}
?>
</ul>
<br>
<div class="float-right">
<?php
echo $sayfalama->create(); // Sayfalama çıktısını yazdır.
?>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"
integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"
integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
crossorigin="anonymous"></script>
</body>
</html>
Sınıfımızın kullanımı bu şekilde, Sınıf ile ilgili hata veya sorularınızı yorum atarak bildirebilirsiniz.
Kolay gelsin.
Yorum yapmak için lütfen giriş yapın veya üye olun