Pagination trong Laravel
Giới thiệu Trong các framework mà tôi từng làm việc, tôi cảm nhận thấy laravel hỗ trợ việc phân trang rất đơn giản, nhanh gọn mà lại phù hợp với công nghệ hiện thời. Việc tích hợp và sử dụng phân trang trong laravel khá dễ dàng, Laravel có thể tạo nhanh chóng phạm vi link của các trang hiện tại ...
Giới thiệu
Trong các framework mà tôi từng làm việc, tôi cảm nhận thấy laravel hỗ trợ việc phân trang rất đơn giản, nhanh gọn mà lại phù hợp với công nghệ hiện thời. Việc tích hợp và sử dụng phân trang trong laravel khá dễ dàng, Laravel có thể tạo nhanh chóng phạm vi link của các trang hiện tại và các trang lân cận, cũng như việc tạo các trang HTML phù hợp và tương thích với Bootstrap CSS framework..
Cấu hình
Trong Laravel 5 việc cấu hình phần phân trang ta thêm trong file config/view.php như sau:
<?php return array( ... 'pagination' => 'pagination::slider-3', );
– Theo mặc định là laravel có 2 kiểu phân trang sau:
- pagination::slide Phương thức này sẽ cho chúng ta hiển thị các link phần trang đầy đủ
- pagination::simple Phương thức này phân trang dưới link đơn giản chỉ có nút Next và Previous
Các cách phân trang trong laravel
Giả sử với tập dữ liệu mẫu về các thương hiệu thời trang trên thế giới như sau:
Để phân trang với Laravel là điều cực kì đơn giản, thay vì bạn phải $brands = Brand::all() lấy toàn bộ bản ghi của Brand thì bạn chỉ cần lấy phân trang và lấy theo 10 bản ghi
// Sử dụng Eloquent Model $brands = Brand::paginate(10); // Sử dụng Query Builder $brands = DB::table('brands')->paginate(10);
Trong một số trường bạn đã có sẵn dữ liệu mà không phải lấy từ csdl thì bạn có thể phân trang theo cách thủ công thông qua phương thức Paginator::make,ví dụ:
$paginator = Paginator::make($brands, $totalBrand, $perPage); // Bạn có thể thay đổi được đường dẫn link của các trang đã phân như sau: $brands = Brand::paginate(); $brands->setBaseUrl('custom/url');
Khi đó link của trang sẽ có dạng:
http://example.com/custom/url?page=2
Hay là bạn cũng có thể phân trang dữ liệu đơn giản chỉ có nút Next và Previous bằng cách sử dụng $brands = Brand::simplePaginate(10);
Trên view để hiển thị link phân trang thì điều tiên quyết chúng ta phải chèn {{ $brands->links(); }} vào trong view.
Sau đó ta có thành quả như sau:
Một số tiện ích khác
Laravel cung cấp cho chúng các phương thức để thao tác và tùy chỉnh với việc phân trang dữ liệu:
- getCurrentPage
- getLastPage
- getPerPage
- getTotal
- getFrom
- getTo
- count