ホームページ >ウェブフロントエンド >htmlチュートリアル >laravel基本チュートリアル -- paging_html/css_WEB-ITnose

laravel基本チュートリアル -- paging_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:15:481197ブラウズ

ページネーション

はじめに

他のフレームワークでは、通常、ページネーションはもっと面倒です。 laravelを使うととても簡単になります。 Laravel は、現在のページに基づいてインテリジェントな範囲リンクを迅速に生成でき、生成される HTML は Bootstrap CSS フレームワークと互換性があります。

基本的な使用法

クエリビルダー結果のページ分割

要素をページ分割するにはいくつかの方法があります。最も簡単な方法は、クエリ ビルダーまたは Eloquent クエリの paginate メソッドを使用することです。 paginate メソッドは、現在のユーザーが訪問している現在のページに基づいて、正しいディスプレイスメントと表示範囲を自動的に設定します。デフォルトでは、現在のページは HTTP リクエストのクエリ文字列 ?page を通じて自動的に取得されます。もちろん、Laravel はこの値を自動的に検出し、生成されたページネーター リンクに適切な値を自動的に挿入します。

まず、クエリ内での paginate メソッドの呼び出しを見てみましょう。この例では、paginate メソッドでページごとのインプレッション数を渡すだけで済みます。ページごとの表示数を 15 に設定しましょう:

<?phpnamespace App\Http\Controllers;use DB;use App\Http\Controllers\Controller;class UserController extends Controller{  /**   * Show all of the users for the application.   *   * @return Response   */   public function index()   {     $users = DB::table('users')->paginate(15);     return view('user.index', ['users' => $users]);   }}

注: 現在、laravel で groupBy 構文を使用すると、ページング操作を正しく実行できません。 groupBy を使用して結果をページ分割する必要がある場合は、クエリを実行して手動でページ分割することをお勧めします。

単純なページネーション

「前のページ」と「次のページ」リンクを単に表示するだけの場合は、simplePaginate メソッドを使用して有効なクエリを実行することを選択できます。これは、ビュー内の各ページのリンクを表示する必要がない場合に、一部の大規模なデータベースで非常に効果的です。

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

Eloquent の結果をページ分割する

Eloquent クエリの結果をページ分割することもできます。 User モデルをページ分割して、1 ページに 15 個のアイテムを表示しましょう。構文は、ページネーションにクエリ ビルダーを使用する場合とよく似ています:

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

もちろん、ページネーションの前に他のクエリを優先することもできます:

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

Eloquent モデルをページネーションするときに simplePaginate メソッドを使用することもできます:

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

手動での作成Paginator

場合によっては、Paginator インスタンスを手動で作成し、項目の配列を渡す必要がある場合があります。ニーズに応じて、IlluminatePaginationPaginator インスタンスまたは IlluminatePaginationLengthAwarePaginator インスタンスを作成できます。

Paginator クラスは、結果内の項目の合計数を知る必要はありません。実際、まさにこのため、このクラスは最後のページを取得するメソッドを提供しません。 LengthAwarePaginator は Paginator に似ており、ほぼ同じパラメータを受け入れます。ただし、結果に項目の合計数が含まれる必要があります。

一方、PaginatorはEloquentのクエリビルダーとsimplePaginateメソッドに相当します。そして、LengthAwarePaginator が paginate メソッドに相当します。

ページャー インスタンスを手動で作成する場合は、ページャーに渡された結果を手動でスライスする必要があります。スライス方法がわからない場合は、PHP の array_slice メソッドを確認してください。

結果をビューに表示する

クエリビルダーまたはEloquentクエリでpaginateメソッドまたはsimplePaginateメソッドを使用すると、ページネーターのインスタンスを取得できます。 paginate メソッドが呼び出されると、IlluminatePaginationLengthAwarePaginator インスタンスが取得されます。 simplePaginate メソッドが呼び出されると、IlluminatePaginationPaginator インスタンスが取得されます。これらのオブジェクトは、結果セットを記述するためのさまざまなメソッドを提供します。これらのヘルパー メソッドに加えて、ページャー自体も反復子であり、配列のようにループできます。

したがって、ページ分割された結果を取得したら、次のように Blade ビューでページ分割されたリンクを表示および生成できます:

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

links メソッドは、結果セットに基づいてページ分割された結果を生成します。 ?page クエリ変数は、すべてのリンクに自動的に含まれます。 links メソッドを使用して生成された HTML は、Bootstrap CSS フレームワークと互換性があります。

カスタム ページネーター URL

setPath メソッドを使用すると、ページネーターによって生成されるリンクの URI をカスタマイズできます。たとえば、ページネーターに http://example.com/custom/url?page=N のようなものを生成させたい場合は、custom/url を setPath メソッドに渡すことができます:

Route::get('users', function () {  $users = App\User::paginate(15);  $users->setPath('custom/url');});

クエリ文字列をページネーターに追加します。 link

appends メソッドを使用して、クエリ文字列をページネータ リンクに追加できます。たとえば、&sort=votes クエリ文字列をページネータ リンクに追加します。次のように appends メソッドを呼び出すことができます:

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

ページャーの URL にハッシュ フラグメントを追加する必要がある場合は、fragment メソッドを使用できます。たとえば、ページネーション リンクに #foo を追加します。

{{ $users->fragment('foo')->links() }}

その他のヘルパー メソッド

ページネータ インスタンスで次のメソッドを呼び出して、追加のページネータ情報にアクセスできます:

  • $results->count()
  • $results->currentPage()
  • $results->firstItem()
  • $results->hasMorePages()
  • $results->lastItem() (Not avaliable when using simplePaginate)
  • $results->nextPageUrl()
  • $results->perPage()
  • $results->previousPageUrl()
  • $results->total() (Not available when using simplePaginate)
  • $results->url($page)

转换结果为 JSON

laravel 的分页器类实现了 Illuminate\Contracts\Support\JsonableInterface 契约并且暴露了 toJson 方法,所以它可以非常简单的将分页结果转换为 JSON 格式。

你也可以在路由或者控制器动作中简单的返回分页器实例来进行 JSON 格式的响应:

Route::get('users', function () {  return App\User::paginate(); });

分页器的 JSON 信息会包含许多的元数据,比如 total,current_page,last_page 等等。而实际的结果对象集会保存在 JSON 数组的 data 键中。下面是一个从路由中返回分页器实例的响应示例:

分页器 JSON 示例

{   "total": 50,   "per_page": 15,   "current_page": 1,   "last_page": 4,   "next_page_url": "http://laravel.app?page=2",   "prev_page_url": null,   "from": 1,   "to": 15,   "data":[        {            // Result Object        },        {            // Result Object        }   ]}
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。