Sayfalama Kütüphanesi


    × Bunları biliyor muydunuz?
"ZN Framework'te tema entegrasyonu sürükle bırak kadar basit bir şekilde gerçekleştirilebilmektedir."


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 SE ve ZN CE dağıtımları için terminal kurulum komutu.

↓ 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 $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 kullanbilmeniz için saylama linklerinin bazı özellik ve değer çiftleri almasını sağlar.
classic Klasik sayfalama barı oluşturur.
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


String create(Int $start, Array $settings = [])
This url(String $url)
This start(Int $start)
This limit(Int $limit)
This totalRows(Int $totalRows)
This countLinks(Int $countLinks)
This linkNames(String $prev, String $next, String $first, String $last)
This style(Array $style)
This css(Array $css)
This settings(Array $config = [])
This type(String $type)
This output(String $type)
String DB::pagination(String $url = NULL, Array $settings = NULL)

 

 

# Create (ZN >= 0.0.1)


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 (ZN >= 0.0.1)


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 (ZN >= 0.0.1)


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::get('row'))
               ->url('products/comments')
               ->create();

 

 

# Limit (ZN >= 0.0.1)


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::start(URI::get('row'))
               ->url('products/comments')
               ->limit(5)
               ->create();

 

 

# TotalRows (ZN >= 0.0.1)


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::start(URI::get('row'))
               ->url('products/comments')
               ->limit(15)
               ->totalRows(200)
               ->create();

 

 

# CountLinks (ZN >= 0.0.1)


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::start(URI::get('row'))
               ->url('products/comments')
               ->limit(15)
               ->totalRows(200)
               ->countLinks(3)
               ->create();

 

 

# LinkNames (ZN >= 0.0.1)


Ö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::start(URI::get('row'))
               ->url('products/comments')
               ->limit(15)
               ->totalRows(200)
               ->countLinks(3)
               ->linkNames('[ prev ]', '[ next ]', '[+ first +]', '[+ last +]')
               ->create();

 

 

# Style (ZN >= 0.0.1)


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::start(URI::get('row'))
               ->url('products/comments')
               ->limit(15)
               ->totalRows(200)
               ->countLinks(3)
               ->linkNames('[ prev ]', '[ next ]', '[+ first +]', '[+ last +]')
               ->style(['links' => 'color:green;', 'current' => 'font-size:30px;'])
               ->create();

 

 

# CSS (ZN >= 0.0.1)


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

 

 

# Output (ZN FE 5.5.70 - ZN 5.5.10)


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::start(URI::get('row'))
               ->output('bootstrap')
               ->url('products/comments')
               ->limit(15)
               ->totalRows(75)
               ->countLinks(5)
               ->create();

 

 

# DB::pagination() (ZN >= 2.0.5)


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 >

 

 

# 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)
    {   
        
    }

    public function ajaxPagination()
    {
        if( ! Http::isAjax() )
        {
            return false;    
        }

        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
{[ Import::style('bootstrap'); Import::script('jquery'); ]} 

<div id="content"> 
    @Import::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: 'Home/ajaxPagination',
            data: {'row': $(this).attr('prow')},
            type: 'post',
            success: function(data)
            {
                $('#content').html(data);
            }
        });
    })
</script>