/ / Laravel Framework / Comments (6)

Phân trang trong laravel framework

Phân trang dữ liệu là vấn đề quan trọng mà bất kỳ website nào cũng cần phải có.Chắc hẳn khi các bạn đọc bài viết này các bạn đã có khái niệm về phân trang cũng như hiểu thuật phân trang trong php rồi phải không nào.Trong các PHP framework hiện này thì đều tích hợp thư viện phân trang và mỗi framework có thuật toán phân trang khác nhau.Laravel Framework cũng vậy nó cung cấp cho chúng ta rất nhiều phương thức phân trang đơn giản và hiệu quả.

Phân trang trong laravel framework

– Để có dữ liệu test cho phần này mình sẽ sử dụng artisan để tạo migration bảng user (về cách tạo các bạn có thể xem lại bài trước cách tạo migration )

Bảng users

Bảng users

– Trong Laravel để cấu hình phân trang rất đơn giản các bạn chỉ cần vào app/config/view.php

<?php
return array(
    ...
    'pagination' => 'pagination::slider',
);

– Theo mặc định là laravel có 2 kiểu phân trang sau:

    1. pagination::slider Phương thức này sẽ cho chúng ta hiển thị các link phần trang đầy đủ
    2. 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

Sử dụng Query Buider

– Đây là cách phân trang đơn giản nhất,các bạn có thể sử dụng lớp Query Buider để thực hiện:

$users = DB::table('user')->paginate(5);

Với câu lệnh trên chúng ta đang lấy ra 5 thành viên trên 1 trang.

Sử dụng Eloquent Model

– Với cách này các bạn chỉ cần sử dụng:

$users = User::paginate(5);

Ngoài ra các bạn cũng có thể thêm các điều kiện cho việc phân trang,các bạn có thể xem các câu điều kiện sử dụng trong Eloquent ORM ở đây,ví dụ:

$users = User::where('id', '>', 20)->paginate(5);

Phân trang dữ liệu với “Simple Pagination”

– Đây là cách phân trang dữ liệu đơn giản chỉ có nút Next Previous

$users = User::where('id', '>', 20)->simplePaginate(5);

Phân trang dữ liệu thủ công

– 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($users, $totalUser, $perPage);

Bạn cũng có thể thay đổi đường dẫn của các link phân trang như sau:

$users = User::paginate();
$users->setBaseUrl('custom/url');

Lúc này nó sẽ tạo ra link dạng :

http://example.com/custom/url?page=2

Thêm dữ liệu vào link phân trang

– Trong 1 số trường hợp mà bạn cần thêm 1 vài tham số vào link phân trang thì chúng ta có thể sử dụng phương thức appends ,ví dụ:

<?php echo $users->appends(array('param' => 'value'))->links(); ?>

Lúc này nó sẽ tạo ra link có dạng:

http://example.com/custom?url=2&param=value

Hiển thị dữ liệu phân trang

– Sau khi lấy dữ liệu phân trang trong CSDL xong Laravel sẽ trả về cho chúng ta 1 mảng các đối tượng,lúc này chúng ta chỉ cần gửi dữ liệu đó sang bên view và hiển thị:

return View::make('user.index')->with('users',$users);

Phần view hiển thị sẽ như sau:

<div class="list_user">
    <?php foreach ($users as $user): ?>
        <?php echo $user->name; ?>
    <?php endforeach; ?>
</div>
<?php echo $users->links(); ?>

Phương thức links() sẽ thực hiện tạo link phân trang cho chúng ta,nếu bạn muốn tùy chỉnh link phân trang theo ý muốn của mình có thể sử dụng:

<?php echo $users->links('view.name'); ?>

– 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:

  1. getCurrentPage
  2. getLastPage
  3. getPerPage
  4. getTotal
  5. getFrom
  6. getTo
  7. count


30/05/2015
Written by admin

Hiện do a Tuyền (nguyên adminsite hocphp.info) không còn thời gian để phát triển site, nên do có cơ duyên và được a tin tưởng để cho mình tiếp tục phát triển. Hi vọng mọi người cùng nhau phát triển và chia sẽ nhiều hơn nữa, ngoài ra mình cũng cố gắng chia sẽ các seri về web cũng như các ngôn ngữ khác chất nhất có thể. có gì thiếu sót hi vọng mọi người bỏ qua.

Bài viết chùng chuyên mục

6 Comments

  1. Nguyễn Hưởng says:
     /  Reply

    Chỉ riêng phân trang thôi mà đã nhiều kiểu thế này, đọc mà hoa hết cả mắt lên rồi 🙂

  2. NguyenTuong says:
     /  Reply

    anh cho em hoi la gio em muon doi url phan trang ?page=2 thanh page/2 thi lam sao a.

    • Jack Reacher says:
       /  Reply

      $config[‘use_page_numbers’] = TRUE;

      • NguyenTuong says:
         /  Reply

        Mình cấu hinh $config[‘use_page_numbers’] = TRUE; ở file nào vậy anh. Em cảm ơn

  3. NguyenTuong says:
     /  Reply

    sao minh hoi ma khong co ai tra loi vay?

Gửi bình luận

Giới thiệu

Mình tạo ra blog này với mong muốn chia sẻ và học hỏi kinh nghiệm trong quá trình thiết kế website. Website đang trong quá trình phát triển chân thành cảm ơn mọi sự góp ý của các bạn để làm cho website ngày càng hoàn thiên.

DMCA.com Protection Status
Liên hệ
Theo dõi qua Email

Tổng hợp các bài viết về

Hoc php - CodeIgniter Framework - Laravel Framework - PHP va MYSQL