博主信息
Victor的博客
博文
35
粉絲
0
評論
0
訪問量
8637
積分:0
P豆:78

laravel框架--文章列表及分頁功能的實現--2019年11月23日

2019年11月30日 19:30:24閱讀數:179博客 / Victor的博客 / laravel框架

參考課程內容,完成后臺文章列表及分頁功能

文章列表功能的實現:

數據分頁最簡單的是使用“查詢構造器”或 Eloquent query 的 paginate 方法。
paginate 方法根據用戶瀏覽的當前頁碼,自動設置恰當的偏移量 offset 和限制數 limit。
默認情況下,HTTP 請求中的 page 查詢參數值被當作當前頁的頁碼。Lavarel 自動偵測該值,并自動將其插入到分頁器生成的鏈接中。
Lavarel5.8 無法高效地實現使用了 groupBy 語句的分頁操作。如果需要使用對使用了 groupBy 的結果集分頁,需要手工查詢數據庫并創建分頁。

基本用法

  1. 指定要在每頁顯示 10 條數據:
    $users = DB::table('users')->paginate(10);
  2. 如果只在視圖中簡單地顯示『下一頁』和『上一頁』鏈接,則可以使用 simplePaginate 方法執行更高效地查詢。這在數據很多且不需要顯示每頁的頁碼時非常有用:
    $users = DB::table('users')->simplePaginate(10);
  3. 還可以對 Eloquent 查詢結果進行分頁:
    $users = App\User::paginate(10);
  4. 在 Eloquent 分頁中使用 simplePaginate 方法:
    $users = User::where('votes', '>', 100)->simplePaginate(10);
  5. 在查詢中可以設置諸如 where 語句的其它約束:
    $users = User::where('votes', '>', 100)->paginate(10);
  6. 手動創建分頁可以通過創建 Illuminate\Pagination\Paginator 或
    Illuminate\Pagination\LengthAwarePaginator 實例來實現:
    Paginator 類不需要知道結果集的總數;
    LengthAwarePaginator 接受和 Paginator 幾乎相同的參數;不過,它會計算結果集的總數。
    調用 paginate 方法時,會得到 Illuminate\Pagination\LengthAwarePaginator 實例。
    調用 simplePaginate 方法,得到的是Illuminate\Pagination\Paginator 實例
  7. 得到結果后,可以使用 Blade 顯示數據、渲染分頁鏈接:
    1. <div class="container">
    2. @foreach ($users as $user)
    3. {{ $user->name }}
    4. @endforeach
    5. </div>
    6. {{ $users->links() }}
  8. withPath 方法允許你在生成分頁鏈接時自定義 URI:
    $users = App\User::paginate(15); $users->withPath('custom/url');
  9. 可以使用 appends 方法,向分頁鏈接中添加查詢參數:
    {{ $users->appends(['sort' => 'votes'])->links() }}
  10. 可以設定在分頁器的 “窗口” 的每一側顯示多少個附加鏈接。默認情況下,主分頁鏈接的每側顯示三個鏈接。可以使用 onEachSide 方法改變這個數值:
    {{ $users->onEachSide(5)->links() }}
  11. 默認情況下,渲染視圖顯示的分頁鏈接樣式與 Bootstrap CSS 框架兼容。如果你不使用
    Bootstrap,可以定制自己的視圖來渲染這些鏈接:

    {{ $paginator->links('view.name', ['foo' => 'bar']) }}
  12. 自定義分頁視圖的最簡方法是使用 vendor:publish 命令將它們輸出到 resources/views/vendor 文件夾:
    php artisan vendor:publish --tag=laravel-pagination
  13. 如果想要定義不同的文件作為默認分頁視圖,需要在 AppServiceProvider 中使用分頁器的 defaultView 和 defaultSimpleView 方法
    use Illuminate\Pagination\Paginator; public function boot() { Paginator::defaultView('view-name'); Paginator::defaultSimpleView('view-name'); }

    代碼實現

    ```php
    <?php

namespace App\Http\Controllers\Admins;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

// 內容管理

class Content extends Controller {
// 內容列表
public function index(Request $req) {

  1. // 取出type對應的字段名稱(與視圖中的選項一一對應)
  2. $dbTitle = [0 => 'title', 1 => 'title', 2 => 'cate_id', 3 => 'author', 4 => 'status'];
  3. //查詢參數:
  4. $type = (int) ($req->type);
  5. // $wd = ($type==4)?strtotime(trim($req->wd)):trim($req->wd);
  6. $wd = trim($req->wd);
  7. // 給分頁組件傳參數appends
  8. $appends = ['type' => $type, 'wd' => $wd];
  9. //搜索符合條件的數據
  10. $data = DB::table('xpcms_article')->where($dbTitle[$type], 'like', '%' . $wd . '%')->pages(2, $appends);
  11. // 構造data參數,傳給視圖
  12. $data['type'] = $type;
  13. $data['wd'] = $wd;
  14. return view('admins/content/index', $data);
  15. }
  16. public function add() {
  17. return view('admins/content/add', $data);
  18. }

}

```

實現效果

批改老師:歐陽克歐陽克

批改狀態:合格

老師批語:完成的不錯,繼續加油

全部評論

文明上網理性發言,請遵守新聞評論服務協議

條評論
暫無評論暫無評論!
  • 白小姐救世民彩图2019