一応、PSR7のServerRequestInterfaceも使えます。
セッションを使って、ページ番号やフォーム入力を覚えるのが特徴。簡単に最後と同じページを作成できます。
何故作ったのか?
仕事でDoctrine2を採用してみたのだが、いい感じのページネーションがなかったので作ってみた。ただし仕事には間に合わなかったので、実サイトでの実績はないです。
こういうページネーションに、どのぐらい需要があるのかわからないけど、この際なのでパッケージとして作ってみた。
ライセンス:MIT
PSR準拠 :Psr-1、Psr-2、Psr-4
使い方
インストール
composerで。
$ composer require "wscore/pagination"
Pagerオブジェクト
Pagerオブジェクトを最初に作ります。
use WScore\Pagination\Inputs; use WScore\Pagination\Pager; // construction $pager = new Pager(['_limit' => 15]); // set up pager using Psr-7 ServerRequestInterface. $pager = $pager->withRequest($request); // or from global data. $pager = $pager->withQuery($_GET, '/find');
次に、データベースへのクエリなどを実行します。callメソッドにクロージャーを渡してください。引数はInputsというクラスのオブジェクトです。
$inputs = $pager->call( function(Inputs $inputs) use($pdo) { // query the PDO! $found = $pdo->prepare("SELECT * FROM tbl WHERE type=? and num>? OFFSET ? LIMIT ?") ->execute([ $inputs->get('type'), $inputs->get('num'), $inputs->getOffset(), $inputs->getLimit(), ]) ->fetchAll(); $inputs->setList($found); }); $found = $inputs->getList(); $type = $inputs->get('type');
後は、クロージャー内で必要な処理を書き込みます。
Inputsオブジェクトから、オフセットとリミットや、フォームの入力を読み取れます。
HTML出力
最後に、HTMLへの出力は、Paginateというオブジェクトを使います。
use WScore\Pagination\Html\Paginate;
$inputs->paginate(new Paginate());
echo $inputs->__toString();
すると、こんなページネーションが表示されます。
リクエストの仕方
ここが、このパッケージの肝になります。「_page」を使いこなします。
1.検索条件フォーム
ページネーションを行う場合は、検索条件をフォームで選ぶ場合が多いと思います。その場合は、普通にフォームを作ってください。
<form> <input type="text" name="type" /> <input type="integer" name="num" /> <input type="submit" /> </form>
注意:_pageは使わないで下さい。
フォームの内容は自動でセッションに登録されます。セッションは事前に走らせておいて下さい。
2.ページの指定
指定するページを表示するには_pageにページ番号を指定します。
GET /find?_page=2
検索に使う条件はセッションに保持されているので、同じ条件でオフセットを替えてクエリを実行できます。
3.最後の検索画面
検索画面を表示する際、_pageにページ番号をなしでGetしてみてください。
GET /find?_page
すると、セッションから最後のページ番号と検索条件を読みだします。
To Do
動くはずですが、実際に使ったことがないのでAPIなど変わるかもしれません。なのでアルファリリースです。
0 件のコメント:
コメントを投稿