Laravel5學生成績管理系統-05-分頁

在其它的框架中,分頁是很是讓人苦惱的。而在 Laravel 中倒是很垂手可得的。 Laravel 能夠快速生成基於當前頁面連接的智能「範圍」,而且生成的 HTML 兼容於 Bootstrap CSS 框架。本項目中,咱們將利用laravel的分頁功能,來輕鬆處理學生列表的分頁。php

強烈建議新手或不熟練的朋友在作分頁時先仔細的閱讀下官方文檔。官方文檔-分頁laravel

#基本使用 ##對查詢語句構造器進行分頁 有幾種方法能夠對項目進行分頁。最簡單的是使用 paginate 方法。在使用 查詢語句構造器 或是 Eloquent 查找 時。由 Laravel 提供的 paginate 方法可以自動斷定當前頁面正確的數量限制和偏移數。默認情況下,當前頁數由 HTTP 請求所帶的** ?page **參數來決定。固然,該值由 Laravel 自動檢測,並自動插入由分頁器生成的連接。數據庫

首先,讓咱們來看看如何在數據庫查找時使用 paginate 方法。在這個例子中,傳遞給 paginate 惟一的參數是你想在「每頁」顯示的數據數。咱們在此指定每頁顯示 15 條數據:數組

<?php

namespace App\Http\Controllers;

use DB;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 顯示應用的全部用戶。
     *
     * @return Response
     */
    public function index()
    {
        $users = DB::table('users')->paginate(15);

        return view('user.index', ['users' => $users]);
    }
}

注意:目前, Laravel 的分頁沒法有效操做含有 groupBy 的語句。若是你須要對使用 groupBy 的結果作分頁,建議你先進行數據庫查找後再手動製做分頁。app

##「簡易分頁」 若是在你的視圖中只須要顯示簡單的「下一步」和「上一步」連接,你能夠選擇使用 simplePaginate 方法來進行更高效的查找。當你不須要在頁面上顯示頁碼時,這對於大數據來講將會很是有用:框架

$users = DB::table('users')->simplePaginate(15);

##對 Eloquent 模型進行分頁 你也能夠對 Eloquent 進行分頁。在這個例子中,咱們將對 User 模型進行分頁而且設置其每頁有 15 條數據。如你所見,語法跟查詢語句構造器的分頁語法幾乎同樣:函數

$users = App\User::paginate(15);

固然,你也能夠對 paginate 設置其它限制的查找,如 where 條件:post

$users = User::where('votes', '>', 100)->paginate(15);

或者也能夠在使用 Eloquent 模型進行分頁時使用 simplePaginate 方法:大數據

$users = User::where('votes', '>', 100)->simplePaginate(15);

##將分頁結果顯示在視圖中 當在查詢語句構造器或 Eloquent 中使用 simplePaginate 方法或 paginate 方法時,你會獲得一個分頁器的實例。當使用 paginate 方法時,將獲得 Illuminate\Pagination\LengthAwarePaginator 實例。當使用 simplePaginate 方法時,則會獲得 Illuminate\Pagination\Paginator 實例。這些對象提供幾種方法用來描述結果集。除了這些輔助函數以外,分頁器的實例也是個迭代器,而且能夠像數組同樣來使用循環取值。url

總之,一旦你獲取到結果,就能夠對結果進行顯示,並使用 Blade 模板渲染頁面的連接:

<div class="container">
    @foreach ($users as $user)
        {{ $user->name }}
    @endforeach
</div>

{!! $users->render() !!}

render 方法將給予查找結果中其它頁面的連接。每個連接中都已經包含正確的 ?page 查找字符串變量。請記住,由 render 方法生成的 HTML 兼容於 Bootstrap CSS 框架。

**注意:**當在 Blade 模版中使用 render 方法時,必定要使用 {! !} 語法,這樣 HTML 連接纔不會被轉義。

##加入參數到分頁連接中 你可使用 appends 方法添加所須要的參數到分頁連接中。例如,要加入 &sort=votes 到每一個分頁連接時,你應該這樣使用 appends 方法:

{!! $users->appends(['sort' => 'votes'])->render() !!}

OK,以上就爲Laravel分頁的核心內容,先複習到這裏,詳情參考*官方文檔-分頁* ,下面在咱們的項目中使用分頁方法: #項目實戰 ##一、獲取學生列表,並分頁

/**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        // 獲取學生列表
        $ret = UsersInfo::where('is_admin', 0);

        // 獲取總數
        $count = $ret->count();

        // 分頁
        $users = $ret->paginate(2);
        return view('Admin.index', compact('users', 'count'));
    }

##二、將分頁結果顯示在視圖 Admin/index.blade.php

@extends('master')    {{-- 繼承master模版 --}}

@section('title')
    管理員
@stop

@section('content')
    <div class="container">
        <div class="row">
            <div class="col-md-10">

                @include('errors.list')

### 學生信息表

                <table class="table table-hover">
                    <tr>
                        <td>學號</td>
                        <td>姓名</td>
                        <td>性別</td>
                        <td>手機</td>
                        <td>班級</td>
                        <td>郵箱</td>
                        <td>操做</td>
                    </tr>
                    @if (count($users))
                        @foreach ($users as $user)
                            <tr>
                                <td>{{ $user->id }}</td>
                                <td>{{ $user->name }}</td>
                                <td>{{ $user->sex }}</td>
                                <td>{{ $user->phone }}</td>
                                <td>{{ $user->pro_class }}</td>
                                <td>{{ $user->email }}</td>
                                <td>
                                    <button class="btn btn-sm btn-info" data-toggle="modal" data-target="#myModal{{$user->id}}">更新分數</button>
                                    <form action="{{ url('admin/'.$user->id) }}" style='display: inline' method="post">
                                        <input type="hidden" name="_method" value="DELETE">
                                        <input type="hidden" name="_token" value="{{csrf_token()}}">
                                        <button class="btn btn-sm btn-danger" onclick="return confirm('肯定刪除?')">刪除</button>
                                    </form>
                                </td>
                            </tr>

                            read1

                        @endforeach
                    @else

# 沒有學生名單,請管理員添加

                    @endif
                </table>
                {{-- 分頁 --}}}
                <?php echo $users->render(); ?>
            </div>
            read2
        </div>

    </div>
@stop

分頁結果: tu

咱們能夠看到,Laravel的分頁使用很是簡單,在控制器中調用分頁方法**$ret->paginate(2);,而後在視圖中用<?php echo $users->render(); ?> 輸出分頁列表**渲染便可。

相關文章
相關標籤/搜索