Php kütüphanesinden bahsetmeye geçmeden önce kısa bir tanımını yapacak olursak datatables, websitelerinde kullanılmak üzere arama, sıralama ve sayfalama gibi yetenekleri olan bir jquery kütüphanesi. Özelikle admin sayfalarında veritabanından çekilen verileri listelerken kullanılıyor. Website önyüzlerinde de kullanıldığı örnekler var tabii ki.
Veritabanından çekilen kayıtlar çok fazla olduğunda sayfa yükleme süresi gecikecektir. Yukarıdaki resimde gözüken 10 kaydın veritabanından sorgulanması ve tarayıcının bunu işlemesi 3503 kayıda göre daha hızlı gerçekleşmekte. Bu mantık ile datatables'ın server side (sunucu tarafı) özelliği sayesinde sadece görünen verileri parça parça veritabanından alabilir ve bunları ekrana yansıtabiliriz. Her zaman server side özelliğini kullanmak da doğru olmaz. Benim düşüncem kayıt sayınız hiç bir zaman 100 üstüne çıkmıyorsa ve performans ile ilgili bir sıkıntınız yoksa server side işlemlerini kullanmamak gerekir.
Datatables ayarlarından server-side özelliğini aşağıdaki şekilde aktif edebiliyoruz. Bu özellik aktif iken datatables kütüphanesi sayfalama-sıralama-arama işlemlerinin hepsini sunucu tarafına bırakıyor. Diğer bir deyişle sunucu tarafında hangi dil kullanılıyorsa (asp.net, php vb.) o dilde veritabanı sorgularını buna uygun değiştirmek gerekiyor.
Datatables'ın çalışması için css ve js dosyalarını web sayfasına eklemeniz gerekiyor. Aşağıdaki gibi html sayfanızı düzenleyebilirsiniz.
<html>
<head>
....
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.24/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.24/js/jquery.dataTables.js"></script>
</head>
<body>
....
<table border="0" class="display" id="example" width="100%">
<thead>
<tr>
<th width="8%">Id</th>
<th width="60%">Name</th>
<th width="32%">Unit Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>loading...</td>
</tr>
</tbody>
</table>
....
</body>
</html>
Daha sonra datatables ayarlarından serverSide özelliğini aktif edip, sorguların gerçekleşeceği ve verilerin çekileceği dosya yolunu ayarlamalıyız. Yapılan her işlem sonrası, datatables tarafından ajax dosya yoluna bir sorgu gönderilir. Bu sorgudaki parametrelere göre sunucu tarafı veriyi hazırlar ve datatables json formatında gelen veriyi tablo halinde gösterir. Aşağıdaki javascript kodu datatables'ın sunucu tarafı çalışması için gerekli koddur.
$(document).ready(function () {
$('#example').dataTable({
"serverSide": true,
"ajax": "ajax.php"
});
});
Buraya kadar olan kısımda sadece html ve javascript kullandık. Sunucu tarafından dönen verinin json formatında dönmesi gerekli demiştik. Bunun için ozdemir/datatables php kütüphanesini kullanacağız. Bu kütüphane sayfalama, sıralama ve arama işlemlerini arka planda gerçekleştirip, sadece bir kaç satır kod ile istediğimiz json verisini döndürmektedir. ozdemir/datatables kütüphanesi composer paket yöneticisi ile yükleniyor. Composer sizde yüklü değilse, kurulumu bu linkteki adımlarla yükleyebilirsiniz.
composer require ozdemir/datatables
Terminale yukarıdaki komutu yazdığınızda, composer php kütüphanesini proje klasörünüze kuracak. Eğer herhangi bir php framework kullanıyorsanız, autoloader kullandığınız framework tarafından muhtelemen projenize dahildir. Framework kullanmıyorsanız autoloader dosyasını kendinizin eklemesi gerekmektedir. Bunun için sayfanın başına aşağıdaki şekilde ekleyebilirsiniz.
<?php
require_once 'vendor/autoload.php';
Bu adımdan sonra ozdemir/datatable php kütüphanesi kullanılmaya hazır olacaktır. Javascript kodunda yazdığımız ajax.php aşağıdaki şekilde olabilir.
<?php
// eğer herhangi bir framework kullanıyorsanız bu satırı kaldırabilirsiniz.
require_once '..path/to../vendor/autoload.php';
use Ozdemir\Datatables\Datatables;
use Ozdemir\Datatables\DB\SQLite;
// örnek için Chinook veritabanı kullanılmıştır.
// veritabanını belirtip kütüphane classını bir değişkene atıyoruz.
$path = dirname(__DIR__).'/database/Chinook_Sqlite_AutoIncrementPKs.sqlite';
$dt = new Datatables(new SQLite($path));
// değişkenimiz ile bir sql sorgusu çalıştırıyoruz.
$dt->query('Select TrackId, Name, UnitPrice from Track');
// generate() metodu ile kütüphane tüm işlemleri gerçekleştirip,
// varsayılan olarak json formatında verileri döndürecektir.
echo $dt->generate();
Veritabanından gelen alanları json formatında göstermeden önce düzenleme, ek sütunlar ekleme, özelleştirilmiş filtrelemeler gibi bir çok ek işlemi bu php kütüphanesi ile kolayca yapabilirsiniz. Daha fazlası için https://datatables.ozdemir.be/basic adresindeki örnekleri deneyebilirsiniz.