日本語を記入すると文字化けした話。Commentオブジェクト指向プログラミングでフレームワークを使わずに掲示板を作るよその8。ページングって面倒だよね。今ここ投稿者による編集と削除が出来るようになった掲示板。投稿し続けるとログが延々表示される症状が出ているからページングをつけませう。書いたのとそんなに変わらない。問題はどこで何をするかってことですー。ページ番号をGETとかで保持しながら番号に応じたログを表示します。ログを表示するには表示の始点と終点が必要です。その計算はページ番号×1ページあたりの表示件数で出せます。GETをあれこれするのはコントローラーの仕事なのでその辺の計算はコントローラーにおきます。始点と終点が出せたらその値をモデルに投げてログを切り取らせます。ログを切り取れたら後はビューにそのログを投げる。ビューはログの他にページングリンクとかを表示する仕事もあります。ページングリンクを作るのに必要な値はコントローラーが持っているので、コントローラーから受け取ってリンクを作成します。リンクの作成をビュークラスに入れてしまうと雑多になりすぎるので、クラスファイルを別に作ることにします。コントローラーから受け取った値をページングクラスに渡してインスタンスを作成すればテンプレートでメソッドを使うだけでリンクとかが表示されるようになるっていう寸法ですー。extract下準備としてViewのセッターをちょっと変えとく。今まで$logdataとか$messageみたいなテンプレートで使う変数をdisplayメソッドでゲッターとセットで書いてたんだけど、もっとフリーダムに変数が作れた方が便利なのでextractを使うことにします。新しく$viewVarsというプロパティをViewに追加します。array();入れ替わりに$_logsと$_tokenは削除。ログデータのセッターを$viewVarsのセッターに変更。$this-&gt;viewVars[$property];}displayメソッドにextractを入れる。😀この変更によりコントローラー内のセッターが次のように変わります。$log);//afterトークンの作成はcreateToken()だけ残してViewに移し、Viewのコンストラクタ内で変数にセットするようにしました。$this-&gt;createToken());//トークンなんかテンプレートに渡したいというものがあったとき、setを使うだけで変数の作成が出来るので便利です。Controllerコントローラーにページネーションメソッドを追加します。メソッドの引数はページ番号と1ページあたりの表示件数です。表示件数はiniに入れたりGETで渡してもいいかなーと思うんだけど説明が長引くので直書きにしておく。$end);}ページ番号と表示件数を元に始点・終点を計算してModelの同名メソッドに渡します。Viewへはログの件数と総ページ数をセットにして渡します。ページングが必要なのはログが表示されるインデックスページだけなので、修正するのはindexViewメソッドです。$this-&gt;view-&gt;display();//表示}Modelモデルのpaginateメソッドはforで始点から終点までを切り取ってreturnするだけです。この程度なら別にコントローラー内でやっつけても...とか思うんだけどね。$result;}ViewビューメソッドはPaginationクラスのインスタンス作ってセットするだけ。Pagination($params));}PaginationクラスCakePHPを真似して書きましたお。ページ番号、最大ページ数、データ件数、表示件数を元にナビゲーションを作成します。300行近くあるものは張れないので全文はダウンロードして見てください。ライブラリを探して使うのもアリだと思います。TemplateViewで作成されたインスタンスはテンプレートで$pagenationから使えるようになってます。index.tplにソースを追加するだけで表示のことはクラスが勝手に処理してくれます。メソッドはだいたいCakeのと同じです。