Sayfalama Kütüphanesi


    × Bunları biliyor muydunuz?
"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.

Dosya: Config/ViewObjects.php
string $paging = 'row' Sayfalama türü. Bu değer değiştirilmezse URL üzerinde kayıt sırası gösterilir.
page Bu değer 'page' olarak ayarlanırsa URL üzerinde sayfa numarası gösterilir.
string $prevName Bir önceki sayfa linkinin nasıl görüntüleneceği belirlenir.
string $nextName Bir sonraki sayfa linkinin nasıl görüntüleneceği belirlenir.
string $firstName İlk sayfa linkinin nasıl görüntüleneceği belirlenir.
string $lastName Son sayfa linkinin nasıl görüntüleneceği belirlenir.
int $totalRows Toplam kayıt sayısı ayarlanır.
int $start Kayıt başlangıç indeksi belirtilir.
int $limit Kaçar kaçar sayfalanacağı belirlenir.
int $countLinks Sayfalama barının maximum kaç adet linkten oluşacağı belirlenir.
string $type = 'classic' Sayfalamanın hangi tür ile kullanılacağı.
ajax Bu seçenek sayfalama işlemini ajax ile kullanabilmeniz için saylama linklerinin bazı özellik ve değer çiftleri almasını sağlar.
string $output = 'bootstrap'
Sayfalama barının bootstrap ile uyumlu kullanılabilmesini sağlar.
bootstrap Sayfalama barı bootrap'in stil ve css yapısından etkilenir.
classic Kendinize göre tasarlayabileceğiniz sayfalama barı üretir.
array $style = [] current Aktif sayfa linkine stil vermek içindir. Sayfalama barına stil vermek için kullanılır.
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.
array $class = [] current Aktif sayfa linkine css sınıfı vermek içindir. Sayfalama barına css sınıfları uygulamak içindir.
links Sayfalama barındaki tüm linklere css sınıfı vermek içindir.
prev Bir önceki sayfa linkine css sınıfı vermek içindir.
next Bir sonraki sayfa linkine css sınıfı vermek içindir.
first İlk sayfa linkine css sınıfı vermek içindir.
last Son sayfa linkine css sınıfı vermek içindir.

 

 

# Yöntemler


Pagination::create(int $start, array $settings = []) : string
Pagination::url(string $url) : this
Pagination::start(int $start) : this
Pagination::limit(int $limit) : this
Pagination::totalRows(int $totalRows) : this
Pagination::countLinks(int $countLinks) : this
Pagination::linkNames(string $prev, string $next, string $first, string $last) : this
Pagination::style(array $style) : this
Pagination::css(array $css) : this
Pagination::settings(array $config = []) : this
Pagination::type(string $type) : this
Pagination::paging(string $type) : this
Pagination::output(string $type) : this
DB::pagination(string $url = NULL, array $settings = NULL) : string

 

 

# 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/0">1</a>
<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'
    ]
]);
0 => object
(
        name    => string 'Example' ( length = 7 ),
        id      => string '30' ( length = 4 ),
        user_id => string '131' ( length = 5 )
)

< 12345 >
Sayfalama Türü [6.6.0][2021-03-09]

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.

<a href="#prow=4" prow="4" ptype="ajax">1</a>

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.

Dosya: Controllers/Home.php
<?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.

Dosya: Views/Home/main.wizard.php
@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.

Dosya: Views/Home/pagination.wizard.php
{[ $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>