CakePHP ページネーション機能(Paginator)
基本
コントローラ
設定
public $paginate = [
'limit' => 5,
並び順設定はデータ取得時に実施する方が自由度が高いのでここでは行わない
'order' => [
'id' => 'DESC'
],
アソシエーションはデータ取得時に実施する方が自由度が高いのでここでは行わない
'contain' => ['People']
];
Paginatorコンポーネント読み込み
public function initialize(){
parent::initialize();
↓ は不要(デフォルトで使用できる)
$this->loadComponent('Pagenator');
}
ページネーションを利用したデータ取得
public function list(){
$lists = $this->paginate(
$this->Products
->find()
->contain(['~'])
->where(['~ !=' => '0'])
->order(['~' => 'DESC', '~' => 'DESC'])
);
$this->set(compact('lists'));
}
ビュー
ページ移動
※~\src\Template\(コントローラ名)\(ビュー名).ctp
<div class="paginator">
<ul class="pagination">
<?= $this->Paginator->first('<< ' . '最初') ?>
<?= $this->Paginator->prev('< ' . '前へ') ?>
<?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next('次へ' . ' >') ?>
<?= $this->Paginator->last('最後' . ' >>') ?>
</ul>
</div>
ページ番号
【通常】
<?= $this->Paginator->numbers() ?>
【オプション】
<?=
$this->Paginator->numbers([
現ページより前のページがあれば'<<'を表示
'before' => $this->Paginator->hasPrev() ?
$this->Paginator->first('<<') : '',
現ページより後のページがあれば'>>'を表示
'after' => $this->Paginator->hasNext() ?
$this->Paginator->last('>>')
'modules' => 4
'separator' => '|'
]);
?>
設定項目 | 機能 |
---|---|
before | 最初のリンクの前に表示する内容 |
after | 最後のリンクの前に表示する内容 |
modules | カレントページ番号を除いた表示リンク数 2の場合→1,2(カレント),3 |
separator | リンク間区切り文字 |
カウンター
<?=
$this->Paginator->counter([
'format' => 'ページ {{page}} / {{pages}}, レコード {{current}} / {{count}} '])
?>
メソッド
メソッド | 機能 |
---|---|
next | 次 |
prev | 前 |
first | 最初 |
last | 最後 |
counterRange | カウンター(format=rangeの場合) |
counterPages | カウンター(format=pagesの場合) |
numbers | ページ番号 |
current | 現在ページ番号 |
sort | ソートヘッダー(並び順未指定) |
sortAsc | ソートヘッダー(昇順) |
sortDesc | ソートヘッダー(降順) |
組込変数
変数名 | 機能 |
---|---|
{text} | ページ番号 |
{url} | 遷移先URL |
{page} | 現ページ番号 |
{pages} | 総ページ数 |
{current} | 現ページでのレコード数 |
{count} | 総レコード数 |
独自リンク
テンプレート
※~\config\my-paginator-temp.php
<?php
$number = '<span style="';
$number .= 'border: solid 1px black; ';
$number .= 'padding: 10px; ';
$number .= 'margin: 1px; ">';
$number .= '<a href="{{url}}">{{text}}</a>';
$number .= '</span>';
$current = '<span style="';
$current .= 'background-color: black; ';
$current .= 'color: white; ';
$current .= 'border: solid 1px black; ';
$current .= 'padding: 10px; ';
$current .= 'margin: 1px; ">';
$current .= '{{text}}';
$current .= '</span>';
return [
'number' => $number,
'current' => $current
];
テンプレート読み込み
※~\src\View\AppView.php
class AppView extends View
{
public function initialize()
{
$this->loadHelper(
'Paginator', [
'templates' => 'my-paginator-temp'
]);
}
}