設定Configuration
他のフレームワークではペジネーションは苦痛に満ちています。Laravelでは簡単です。app/config/view.php
に一つのオプションがあるだけです。pagination
オプションはペジネーションリンクを作成するために、どのビューを使用するかを指定します。デフォルトで2つのビューをLaravelは持っています。In other frameworks, pagination can be very painful. Laravel makes it a breeze. There is a single configuration option in the app/config/view.php
file. The pagination
option specifies which view should be used to create pagination links. By default, Laravel includes two views.
pagination::slider
は現在のページに基づいて知的にリンクの「範囲」を表示します。pagination::simple
はシンプルに「前」と「次」ボタンを表示します。両方のビューは最初からTwitter Bootstrapとコンパチブルです。The pagination::slider
view will show an intelligent "range" of links based on the current page, while the pagination::simple
view will simply show "previous" and "next" buttons. Both views are compatible with Twitter Bootstrap out of the box.
使用法Usage
アイテムをページ分けするには多くの方法があります。一番シンプルな方法はEloquentモデルかクエリービルダーに、paginate
メソッドを用いることです。There are several ways to paginate items. The simplest is by using the paginate
method on the query builder or an Eloquent model.
データベースの結果をペジネーションするPaginating Database Results
$users = DB::table('users')->paginate(15);
注意: 現在、
groupBy
メソッドを使用したペジネーション操作は、Laravelで正しく実行できません。groupBy
を使用したペジネーションを使用する必要がある場合は、データベースクエリーを実行し、その結果でPaginator::make
を使用することをおすすめします。Note: Currently, pagination operations that use agroupBy
statement cannot be executed efficiently by Laravel. If you need to use agroupBy
with a paginated result set, it is recommended that you query the database manually and usePaginator::make
.
EloquentモデルをペジネーションするPaginating An Eloquent Model
さらにEloquentモデルもペジネーションできます。You may also paginate Eloquent[/docs/4.2/eloquent] models:
$allUsers = User::paginate(15);
$someUsers = User::where('votes', '>', 100)->paginate(15);
paginate
メソッドに渡している引数は表示したいアイテムの個数です。一度結果を受け取ったら、それをビューで表示してください。それからlinks
メソッドを使ってペジネーションリンクを生成してください。The argument passed to the paginate
method is the number of items you wish to display per page. Once you have retrieved the results, you may display them on your view, and create the pagination links using the links
method:
<div class="container">
<?php foreach ($users as $user): ?>
<?php echo $user->name; ?>
<?php endforeach; ?>
</div>
<?php echo $users->links(); ?>
これらの生成は全部ペジネーションシステムが面倒を見ます。フレームワークに現在ページを指定していないことに注意してください。Laravelは自動的に判断します。This is all it takes to create a pagination system! Note that we did not have to inform the framework of the current page. Laravel will determine this for you automatically.
ペジネーションでカスタムビューを指定したい場合は、links
メソッドでビューを指定して下さい。If you would like to specify a custom view to use for pagination, you may pass a view to the links
method:
<?php echo $users->links('view.name'); ?>
さらに、以下のメソッドを使用し、追加のペジネーション情報にアクセスできます。You may also access additional pagination information via the following methods:
getCurrentPage
getCurrentPage
getLastPage
getLastPage
getPerPage
getPerPage
getTotal
getTotal
getFrom
getFrom
getTo
getTo
count
count
シンプル・ペジネーション"Simple Pagination"
「次」と「前」のリンクだけをペジネーションビューに表示したい場合は、simplePaginate
メソッドを使用する選択肢により、より効率的にクエリーすべきでしょう。これは、ビューに正確なページ番号を表示する必要がない、巨大なデータセットに対して便利です。If you are only showing "Next" and "Previous" links in your pagination view, you have the option of using the simplePaginate
method to perform a more efficient query. This is useful for larger datasets when you do not require the display of exact page numbers on your view:
$someUsers = User::where('votes', '>', 100)->simplePaginate(15);
ペジネーターを手動で生成するCreating A Paginator Manually
時には手動でペジネーションインスタンスを生成したい場合もあるでしょう。その場合はPaginator::make
を使います。Sometimes you may wish to create a pagination instance manually, passing it an array of items. You may do so using the Paginator::make
method:
$paginator = Paginator::make($items, $totalItems, $perPage);
ペジネーターでカスタムURIを使用するCustomizing The Paginator URI
ペジネーターにより使用されるURIも、setBaseUrl
メソッドでカスタマイズできます。You may also customize the URI used by the paginator via the setBaseUrl
method:
$users = User::paginate();
$users->setBaseUrl('custom/url');
上の例では、次のURLリンクが生成されます。http://example.com/custom/url?page=2The example above will create URLs like the following: http://example.com/custom/url?page=2[http://example.com/custom/url?page=2]
ペジネーションリンクの追加Appending To Pagination Links
ペジネーターのappends
メソッドを使用しペジネーションリンクのクエリー文字列を追加することができます。You can add to the query string of pagination links using the appends
method on the Paginator:
<?php echo $users->appends(array('sort' => 'votes'))->links(); ?>
この例で、以下のようなURLが生成されます。This will generate URLs that look something like this:
http://example.com/something?page=2&sort=votes
ペジネーションのURLに「ハッシュフラグメント」を追加したい場合は、fragment
メソッドが使用できます。If you wish to append a "hash fragment" to the paginator's URLs, you may use the fragment
method:
<?php echo $users->fragment('foo')->links(); ?>
このメソッドの呼び出しで、次のようなURLが表示されます。This method call will generate URLs that look something like this:
http://example.com/something?page=2#foo
JSONへ変換するConverting To JSON
Paginator
クラスはIlluminate\Support\Contracts\JsonableInterface
契約を実装しており、toJson
メソッドを提供しています。ルートからPaginator
インスタンスをリターンすれば、JSONに変換されます。インスタンスが変換された後のJSONには、total
、current_page
、last_page
、from
、to
のような「メタ」情報を含みます。インスタンスの情報はJSON配列のdata
キーで利用できます。The Paginator
class implements the Illuminate\Support\Contracts\JsonableInterface
contract and exposes the toJson
method. You may also convert a Paginator
instance to JSON by returning it from a route. The JSON'd form of the instance will include some "meta" information such as total
, current_page
, last_page
, from
, and to
. The instance's data will be available via the data
key in the JSON array.
カスタム・プレゼンターCustom Presenters
初めからLaravelに用意されている、デフォルトのペジネーションプレゼンターは、Bootstrapと互換性があります。しかし、皆さんが選んだプレゼンテーターに合わせ、カスタマイズすることができます。The default pagination presenter is Bootstrap compatible out of the box; however, you may customize this with a presenter of your choice.
Abstractのプレゼンターを拡張するExtending The Abstract Presenter
Illuminate\Pagination\Presenter
クラスを拡張し、抽象メソッドを実装してください。例えば、ZurbのFoundationでは、次のようになるでしょう。Extend the Illuminate\Pagination\Presenter
class and implement its abstract methods. An example presenter for Zurb Foundation might look like this:
class ZurbPresenter extends Illuminate\Pagination\Presenter {
public function getActivePageWrapper($text)
{
return '<li class="current"><a href="">'.$text.'</a></li>';
}
public function getDisabledTextWrapper($text)
{
return '<li class="unavailable"><a href="">'.$text.'</a></li>';
}
public function getPageLinkWrapper($url, $page, $rel = null)
{
return '<li><a href="'.$url.'">'.$page.'</a></li>';
}
}
カスタムプレゼンターを使用するUsing The Custom Presenter
最初に、カスタムプレゼンターとして働くビューをapp/views
ディレクトリーの中に作成してください。次に、app/config/view.php
設定ファイルの、pagination
オプションへ新しいビューの名前を指定します。最後に、以下のコードをカスタムプレゼンタービューに、設置してください。First, create a view in your app/views
directory that will serve as your custom presenter. Then, replace pagination
option in the app/config/view.php
configuration file with the new view's name. Finally, the following code would be placed in your custom presenter view:
<ul class="pagination">
<?php echo with(new ZurbPresenter($paginator))->render(); ?>
</ul>