Sayfalama Kütüphanesi
"Başlangıç kontrolcüsü üzerinden $this nesnesini data olarak göndererek statik olmayan sınıflara ilgili data üzerinden erişebilirsiniz."
Sayfalama işlemlerini yapmak için oluşturulmuştur. Sayfalama işlemi için 2 izlenecebilecek yol vardır. Birincisi doğrudan doğruya Pagination sınıfının kullanılmasıdır. Diğeri ise Database kütüphanesinin DB::pagination() yöntemidir. İkinci yöntem aslında Pagination sınıfını kullanmaktadır pratikliği doğrudan Database sorgusuna göre sayfalama barının şekillenmesidir. Her ikisinin kullanımına yönelik aşağıda örnekler verilmiştir. Genellikle veritabanından gelen verilere göre sayfalama yapıldığı için ikinci yöntemin kullanımı tavsiye ederiz.
# Bölüm Başlıkları
# Kurulum
# Yapılandırma
# Şema
# Veritabanı Sayfalama
# Ajax Sayfalama
# Kurulum
ZN dağıtımları için kurulum gerekmez.
↓ composer require znframework/package-pagination
# Yapılandırma
Sayfalama ayarları aşağıdaki dosyada yer alır. Bu ayarlar ön tanımlı ayarlardır. İstenirse yöntemlerle ayarlara müdahale edilebilir.
# Yöntemler
# Create
Sayfalama barı oluşturumak için kullanılır.
Parametreler
scalar $start = NULL | Kayıt başlangıç indeksi. Gerekli olmadıkça kullanım gerektirmez. |
array $settings = NULL |
Sayfalama ayaları. Gerekli olmadıkça kullaım gerektirmez. Bu parametre için settings() yöntemi de kullanılabilir. |
return string |
Kullanımı
echo Pagination::create();
echo Pagination::create(URI::segment(-1),
[
'style' => ['links' => 'color:red']
]);
2. Örnekte 1. parametre için URI::segment(-1) yönteminden yararlanmamızdaki amaç sayfalama kayıt numarasının URL'nin son bölümünde olduğu içindir. Eğer sayfalama kayıt numarası farklı bir bölümde ise o bölüme ait segmenti 1. parametreye atayabilirsiniz.
# URL
Sayfalama ayarlarından type:classic ayarlı olduğu sürece sayfalama kütüphanesi URL üzerinden çalışır. Bu nedenle sayfalama barının hangi URL ile çalışılacağı belirtilmelidir. Normalde bu yöntemi kullanmanıza gerek yoktur. Çünkü sayfalama kütüphanesi ön tanımlı olarak mevcut linki otomatik olarak ayarlar. Ancak istisnai durumlar nedeni ile URL belirtimeniz gerekirse bu yöntemden yararlanabilirsiniz.
Parametreler
string $url | Sayfalama barının hangi url üzerinde işlem yapacağı belirlenir. |
return this |
Kullanımı
echo Pagination::url('products/comments')->create();
<a href="https://www.xxx.xxx/products/comments/10">2</a>
<a href="https://www.xxx.xxx/products/comments/20">3</a>
<a href="https://www.xxx.xxx/products/comments/30">4</a>
<a href="https://www.xxx.xxx/products/comments/40">5</a>
<a href="https://www.xxx.xxx/products/comments/10">></a>
# Start
Sayfama işlemine hangi kayıttan başlanacağı ayarlanır. create() yönteminin 1. parametresine eş değerdir. Sayfa geçildikçe kayıt numarası değişeceği için bu yönteme parametre olarak URL de yer alan kayıt indeksi atanır. Ancak sayfalama kütüphanesi ön tanımlı olarak bu işleme ihtiyaç duymaz. Otomatik olarak URL de yer alan son bölüme ait kayıt indeks numarası baz alınır. URL
normal yapı dışında kullanılması gerektiği durumlarda yani URL deki son bölümün kayıt indeksi olmadığı durumlarda bu yöntemin kullanılması gerekir.
Parametreler
string | int $start = NULL | Kayıt başlangıç indeksi. |
return this |
Kullanımı
echo Pagination::start(URI::comments())
->create();
# Limit
Her bir sayfanın kaçar kayıt tutacağını ayarlamak için kullanılır.
Parametreler
int $limit | Sayfalamanın kaç kayıtta bir olacağını ayarlar. |
return this |
Kullanımı
echo Pagination::limit(5)
->create();
# TotalRows
Toplam kaç kayıtın sayfalama işlemine konu olacağı belirtilir.
Parametreler
int $totalRows | Toplam kayıt sayısı. |
return this |
Kullanımı
echo Pagination::limit(15)
->totalRows(200)
->create();
# CountLinks
Sayfalama barında toplam kaç linkin görüntüleneceğidir.
Parametreler
int $countLinks | Toplam link sayısı. Sadece numaralı linkler bu işleme tabi tutulur. |
return this |
Örnekler
echo Pagination::limit(15)
->totalRows(200)
->countLinks(3)
->create();
# LinkNames
Önceki, sonraki, ilk ve son sayfa linklerinin hangi isimle veya şekille görüntüleneceğini ayarlamak için kullanılır.
Parametreler
string $prevName | Bir önceki sayfa linkine verilecek isim. |
string $nextName | Bir sonraki sayfa linkine verilecek isim. |
string $firstName | İlk sayfa linkine verilecek isim. |
string $lastName | Son sayfa linkine verilecek isim. |
return this |
Kullanımı
echo Pagination::limit(15)
->totalRows(200)
->countLinks(3)
->linkNames('[ prev ]', '[ next ]', '[+ first +]', '[+ last +]')
->create();
# Style
Sayfalama barında yer alan linklere stil uygulamak için kullanılır.
Parametreler
array $style | Sayfalama linklerine uygulanacak olan stilleri tanımlar. | |
Kullanılabilir Anahtarlar | ||
current | Aktif sayfa linkine stil vermek içindir. | |
links | Sayfalama barındaki tüm linklere stil vermek içindir. | |
prev | Bir önceki sayfa linkine stil vermek içindir. | |
next | Bir sonraki sayfa linkine stil vermek içindir. | |
first | İlk sayfa linkine stil vermek içindir. | |
last | Son sayfa linkine stil vermek içindir. | |
return this |
Kullanımı
echo Pagination::limit(15)
->totalRows(200)
->countLinks(3)
->linkNames('[ prev ]', '[ next ]', '[+ first +]', '[+ last +]')
->style(['links' => 'color:green;', 'current' => 'font-size:30px;'])
->create();
# CSS
Yukarıda yer alan style kullamı ile bire bire aynı mantıktadır. Sadece stil yerine css sınıfları uygulanır.
Parametreler
array $style | Sayfalama linklerine uygulanacak olan css sınıflarını tanımlar. |
return this |
# Type
Sayfalama barının ajax ile kullanılabilmesi için geliştirilmiştir.
Parametreler
string $type | Sayfalama türü. | |
classic | Standart sayfalama. | |
ajax | Ajax ile kullanılabilir sayfalama. | |
return this |
Kullanımı
echo Pagination::type('ajax')->create();
Detaylı kullanımı için tıklayın.
# Paging [6.6.0][2021-03-09]
Normal kullanımda sayfalama işlemi URL üzerinde kayıt numaralarına göre yürütülür. Bu özellik sayesinde istenirse sayfalama işlemi sayfa numarasına göre yürütülür.
Parametreler
string $type | Sayfalama türü. | |
row | Kayıt numarasına göre. | |
page | Sayfa numarasına göre | |
return this |
Kullanımı
echo Pagination::paging('page')->create();
# Output
Sayfalama barının çıktı türünü değiştirmek için kullanılır. Klasik kullanımda sayfalama barı sadece [a] etiketlerinden oluşurken bootstrap kullanımında [ul] ve [li] kullanımlarını da içerir.
Parametreler
string $type | Bu parametre bootstrap olarak ayarlanırsa çıktı görünümü bootstrap'ın sayfalama barına dönüşür. |
return this |
Kullanımı
echo Pagination::output('bootstrap')
->limit(15)
->totalRows(75)
->countLinks(5)
->create();
# Veritabanı Entegreli Sayfalama
Veritabanı sorgularından sonra doğrudan sayfala barını oluşturmak için kullanılır.
Parametreler
string $url = NULL | url() yöntemi ile aynı görevi üstlenir. |
array $settings = NULL | settings() yöntemi ile aynı görevi üstlenir. |
return string |
Kullanımı
$get = DB::limit(NULL, 1)->get('users');
output( $get->result() );
echo $get->pagination(NULL,
[
'style' =>
[
'current' => 'color:red'
]
]);
(
name => string 'Example' ( length = 7 ),
id => string '30' ( length = 4 ),
user_id => string '131' ( length = 5 )
)
< 12345 >
Sayfalama türünü row yerine page olarak ayarlamak için DB::limit() yönteminin 1. parametresini NULL yerine -1 olarak belirleyin.
$get = DB::limit(-1, 50)->get('users');
output( $get->result() );
echo $get->pagination();
# Ajax Sayfalama
Ajax sayfalama işlemi için öncelikle yapılandırma dosyasında yer alan type anahtarının ajax olarak yapılandırılması gerekmektedir.
'type' => 'ajax'
Bu aşamadan sonra sayfalama linkleri incelenirse ajax ile kullanabileceğiniz bazı değerler içerir.
Yukarıdaki etikette yer alan prow özelliği kayıt numarasını tutarken ptype değeri bu etiketi diğerlerinden ayıran bir seçici oluşturur. Bu değerler ajax gönderimi sırasında kullanılacaktır.
Kontrolcü Oluşturun
Sayfalama ve görünüm çağrımı için kontrolcü oluşturun.
<?php namespace Project<]Controllers;
use Import, Http;
class Home extends Controller
{
public function main(string $params = NULL)
{
}
# void return type provides ajax control in controller.
public function ajaxPagination() : void
{
Import::view('Home/pagination');
}
}
Görünümleri Oluşturun
Home:main kontrolcüsünün otomatik olarak yükleyeceği görünüm dosyasını oluşturun.
@style('bootstrap')
@script('jquery', 'bootstrap')
<div id="content">
@view('HomePagination')
</div>
Sayfalama barında bulunan linke tıklandığında değişecek olan içeriklerin ayrı bir görünüm dosyasında tutulması gerekmektedir.
{[ $menus = DB::limit(Post::row() ?: NULL, 2)->menus(); ]}
<table class="table table-striped">
<thead>
<tr><td>ID</td><td>NAME</td><td>URL</td></tr>
</thead>
<tbody>
@foreach( $menus->result() as $row )
<tr><td>{{ $row->id }}</td>{{ $row->name }}</td><td>{{ $row->url }}</td></tr>
@endforeach
<tr><td colspan="3">{{ $menus->pagination() }}</td></tr>
</tbody>
</table>
<script>
$('#content a[ptype="ajax"]').click(function()
{
$.ajax
({
url: '{{ URL::site('Home/ajaxPagination') }}',
data: {'row': $(this).attr('prow')},
type: 'post',
success: function(data)
{
$('#content').html(data);
}
});
})
</script>