sql

Laravel Custom Sayfalama Linkleri Oluşturma

Laravelde örneğin blog yazı listesini sayfalamak için sorgu yaparken

 $blogs = Blog::paginate(10);

şeklinde sayfalama yapabiliyoruz. Ve aynı şekilde bu şekilde sorgulama yaptığımızda laravel bizim için linkleri oluşturuyor. Ancak bu linkler sizin web sitesinin tasarımına uygun değil ise bu yöntemi kullanarak kendi link düzeninizi oluşturup kullanabilirsiniz.

Standart halde sayfa linklerini listelemek ve link üzerinde filtreleriniz var ise o değerleride başka sayfaya geçtiğinizde kaybetmemek için aşağıdaki şekilde kullanılır.

{{ $blogs->appends(request()->input())->links() }}

Eğer bu linkleri özelleştirmek ve yapısını değiştirmek isterseniz aşağıdaki işlemlerle bunu gerçekleştirebilirsiniz.

Sayfalama yapmak için pagination adında bir blade dosyası oluşturun view klasörü altına. Sonrasında dosyayı düzenleyip alttaki kodları o dosyanın içine yerleştirin.

@if (isset($paginator) && $paginator->lastPage() > 1)

    <ul class="pagination pagination-sm m-0 float-right">

        <?php
        $interval = isset($interval) ? abs(intval($interval)) : 3 ;
        $from = $paginator->currentPage() - $interval;
        if($from < 1){
            $from = 1;
        }

        $to = $paginator->currentPage() + $interval;
        if($to > $paginator->lastPage()){
            $to = $paginator->lastPage();
        }
        $search = '';
        if(isset($_GET['search']))
           $search .='&search='.$_GET['search'];
        if(isset($_GET['author_id']))
           $search .='&author_id='.$_GET['author_id'];
        if(isset($_GET['status_id']))
           $search .='&status_id='.$_GET['status_id'];
        if(isset($_GET['category_id']))
           $search .='&category_id='.$_GET['category_id'];
        ?>

        <!-- first/previous -->
        @if($paginator->currentPage() > 1)
            <li class="page-item">
                <a class="page-link" href="{{ $paginator->url(1) }}{{$search}}" aria-label="First">
                    <span aria-hidden="true">&laquo;</span>
                </a>
            </li class="page-item">

            <li class="page-item">
                <a class="page-link" href="{{ $paginator->url($paginator->currentPage() - 1) }}{{$search}}" aria-label="Previous">
                    <span aria-hidden="true">&lsaquo;</span>
                </a>
            </li>
        @endif

        <!-- links -->
        @for($i = $from; $i <= $to; $i++)
            <?php 
            $isCurrentPage = $paginator->currentPage() == $i;
            ?>
            <li class="page-item {{ $isCurrentPage ? 'active' : '' }}">
                <a class="page-link" href="{{ !$isCurrentPage ? $paginator->url($i) : '#' }}{{$search}}">
                    {{ $i }}
                </a>
            </li>
        @endfor

        <!-- next/last -->
        @if($paginator->currentPage() < $paginator->lastPage())
            <li class="page-item">
                <a class="page-link" href="{{ $paginator->url($paginator->currentPage() + 1) }}{{$search}}" aria-label="Next">
                    <span aria-hidden="true">&rsaquo;</span>
                </a>
            </li>

            <li class="page-item">
                <a class="page-link" href="{{ $paginator->url($paginator->lastpage()) }}{{$search}}" aria-label="Last">
                    <span aria-hidden="true">&raquo;</span>
                </a>
            </li>
        @endif

    </ul>

@endif

Yukarıdaki kod içerisinde biraz incelerseniz zaten neyin ne olduğunu anlarsınız. $search değişkeni burada şu işe yarıyor eğer sayfalama yaptığınızda sayfada eğer bir filtre var ise bu filtreleri linklerde tutumanızı sağlamakta. Burada ul ve li taglerini kendi classlarınıza göre özelleştirdikten sonra hangi sayfada listeleme yapmak isterseniz bu dosyayı çağıracaksınız.

Listeleme yapmak istediğiniz view dosyasını açın ve linklerin görüneceği yere aşağıdaki kodu ekleyin.

@include('pagination', ['paginator' => $blogs])

Dosyayı kaydedip, sayfayı açtığınızda linklerin oluşturduğunuz dosya üzerinden çalıştığını göreceksiniz. İyi çalışmalar.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir