FuelPHP のクエリ文字列でのページネーション

FuelPHP 1.5/develop (1.5 の開発版) にクエリ文字列でのページネーション機能が追加されました。


コントローラ

コントローラのコードはこんな感じで使えます。

<?php
......
		$config = array(
			'name'           => 'default',  // テンプレート名
			'total_items'    => $total,     // 合計数
			'per_page'       => 30,         // 1ページあたりの数
			'uri_segment'    => 'p',        // クエリ文字列のパラメータ名
		);
		$pagination = \Pagination::forge('revision', $config);
		
		$revision_list = $wiki->get_revision_list(
			$pagination->per_page,  // 1ページあたりの数
			$pagination->offset     // オフセット
		);
		
		// ページネーションを生成してビューにセット
		$this->template->content->set_safe('pagination', $pagination->render());

uri_segment に文字列を指定すると、以下のようなクエリ文字列のページネーションになります。

http://example.jp/foo/page?p=2

数字 (URI セグメントの番号) を指定すれば、以下のような今までとおりの URI セグメントでのページネーションになります。

http://example.jp/foo/page/2

pagination_url の指定も以前は必須でしたが、省略すると通常は自動で検出されるようになりました。

テンプレート

ページネーションのテンプレートは設定ファイル fuel/core/config/pagination.php に複数定義されていますが、name で指定できます。省略すれば設定ファイルの active に指定されたテンプレートが使用されます。

この機能は、FuelPHP 1.4 から使えます。なお、1.4 で Pagination クラスは書き直され、少し API が変更されていますのでご注意ください。テンプレートは以下のように扱いやすく改良されました。詳しくは、Pagination - Classes - FuelPHP ドキュメント を参照願います。

fuel/core/config/pagination.php

<?php

return array(

	// the active pagination template
	'active'                      => 'default',

	// default FuelPHP pagination template, compatible with pre-1.4 applications
	'default'                     => array(
		'wrapper'                 => "<div class=\"pagination\">\n\t{pagination}\n</div>\n",

		'previous'                => "<span class=\"previous\">\n\t{link}\n</span>\n",
		'previous-link'           => "\t\t<a href=\"{uri}\">{page}</a>\n",

		'previous-inactive'       => "<span class=\"previous-inactive\">\n\t{link}\n</span>\n",
		'previous-inactive-link'  => "\t\t<a href=\"{uri}\">{page}</a>\n",

		'regular'                 => "<span>\n\t{link}\n</span>\n",
		'regular-link'            => "\t\t<a href=\"{uri}\">{page}</a>\n",

		'active'                  => "<span class=\"active\">\n\t{link}\n</span>\n",
		'active-link'             => "\t\t<a href=\"{uri}\">{page}</a>\n",

		'next'                    => "<span class=\"next\">\n\t{link}\n</span>\n",
		'next-link'               => "\t\t<a href=\"{uri}\">{page}</a>\n",

		'next-inactive'           => "<span class=\"next-inactive\">\n\t{link}\n</span>\n",
		'next-inactive-link'      => "\t\t<a href=\"{uri}\">{page}</a>\n",
	),

	// Twitter bootstrap 2.x template
	'bootstrap'                   => array(
		'wrapper'                 => "<div class=\"pagination\">\n\t<ul>{pagination}\n\t</ul>\n</div>\n",

		'previous'                => "\n\t\t<li>{link}</li>",
		'previous-link'           => "<a href=\"{uri}\">{page}</a>",

		'previous-inactive'       => "\n\t\t<li class=\"disabled\">{link}</li>",
		'previous-inactive-link'  => "<a href=\"{uri}\">{page}</a>",

		'regular'                 => "\n\t\t<li>{link}</li>",
		'regular-link'            => "<a href=\"{uri}\">{page}</a>",

		'active'                  => "\n\t\t<li class=\"active\">{link}</li>",
		'active-link'             => "<a href=\"{uri}\">{page}</a>",

		'next'                    => "\n\t\t<li>{link}</li>",
		'next-link'               => "<a href=\"{uri}\">{page}</a>",

		'next-inactive'           => "\n\t\t<li class=\"disabled\">{link}</li>",
		'next-inactive-link'      => "<a href=\"{uri}\">{page}</a>",
	),
);

ビュー

ビューファイルでは以下でページネーションが表示されます。

<?php echo $pagination; ?>