CakePHP::Pagenation(ページャ、ページング処理)
7月 5th, 2007 admin Posted in CakePHP, PHP |
ページャとかページングとか行うためのコンポーネントの紹介
PHPではよくPEAR::PAGERとか使ったりするのだけど自前でやるのがCake流(多分)
以下はBakeryのPaginationのチュートリアルのエスパー翻訳です。
Pagination By Andy Dawson aka "AD7six"
http://bakery.cakephp.org/articles/view/pagination
もしあなたのアプリケーションでたくさんのデータを表示したりするなら、ソートできたりページに分けたほうがいいよね。このチュートリアルではそれをどうやってやるかを説明します。あなたはいくつかのファイルをコピーして数行のコードを書くだけでこれらのことができるでしょう。
これをやるのにCakeの知識はほとんどいりません:)
もしあなたがまだページネーションをつけたいと思うテーブルをもってないならhttp://manual.cakephp.org/appendix/blog_tutorial こことかで準備してくださいね。
セッティング
必要なファイルはすべてbakeryで手に入ります。
http://bakery.cakephp.org/articles/view/67 を/app/controllers/components/pagination.phpに
http://bakery.cakephp.org/articles/view/68を/app/views/helpers/pagination.phpに
http://bakery.cakephp.org/articles/view/69を/app/views/elements/pagination.thtmlに
それぞれ保存します。
コントローラの作成と編集
ページネーションを使うのに必要な編集はコンポーネント、ヘルパーのインクルードとコンポーネントのinitメソッドの呼び出しだけです。
-
<?php
-
class PostsController extends AppController
-
{
-
var $name = 'Posts'; // for PHP4 installs
-
-
function index() {
-
$criteria=NULL;
-
$data = $this->Post->findAll($criteria, NULL, $order, $limit, $page); // Extra parameters added
-
-
$this->set('data',$data);
-
}
-
}
-
?>
ビューの作成と編集
ページネーションを使うにはエレメントのインクルードとオプションとしてソート順を変えるためのテーブルヘッダを指定が必要です。
-
<?php
-
$pagination->setPaging($paging); // Initialize the pagination variables
-
$pagination->sortBy('id'),
-
$pagination->sortBy('title'),
-
$pagination->sortBy('created')
-
); // Generate the pagination sort links
-
-
foreach ($data as $output)
-
{
-
$output['Post']['id'],
-
$html->link($output['Post']['title'], "/Posts/View/{$output['Post']['id']}"),
-
$output['Post']['created']
-
);
-
}
-
?>
-
訳注:ここの段階でページングできてます!便利だなぁ
Ajaxアップデートの追加
もしRequestHandlerコンポーネントとAJAXヘルパーをコントローラにインクルードしていて、prototype.jpもビューに読み込んでいるならajaxアップデートが簡単にできます。デフォルトでは"content"divがアップデートされますが、これはコンポーネントで(そのほかdirectryやrun timeでも)変更可能です。you can disable this automatic behaviour if required.
Prototypeの追加方法
ではどのようにprototypeを追加するのでしょうか?
レイアウトを変更しましょう。
Prototype JavaScriptライブラリはhttp://prototype.conio.net/で入手可能です。
prototype.jsを/app/webroot/js/に入れて
下記のコードを
追記
additional infoとして追加のページがあるようです。
http://bakery.cakephp.org/leafs/view/7
9月 27th, 2008 at 22:02:00
[...] 以前にCakePHP1.1用のPaginationコンポーネントを紹介したんですが、getパラメータに配列を使うと正しくリンクを作ってくれなかったのでそれの補足。 [...]
11月 13th, 2008 at 11:39:42
ほかのサイトにくらべてぬけが少なくわかりやすかったです。
ひどいところはcomponents, elemtnts, helpersにpagination関係のファイルを入れることすら書いてないのですから。
ただ、このサイトのコードをそのまま貼り付けると'や"が全角であったり、タグがいるとおもうのですが?
そして、わからないのがajaxアップデートの部分で、componentsとhelpersの$style='html'を$style='ajax'とし、prototype.jsを/app/webroot/js/に入れて、htmlにprototype.jsを読み込む設定を入れてみました。
しかし、テーブル項目をクリックするとajaxでソートはかかるが、contentの部分がcontainer+contentに置き換わってしまい、その結果container+container+contentとなってヘッダ、フッダが2重に表示されます。
この状態でテーブル項目をクリックするとcontentはまた2重化はされずcontainer+container+contentのままです。
とりあえずdefault.thtmlをcontentのみにすれば2重化は防げますが、非常になぞです。
ちなみにCakePHP1.1.20.7692を使用し、prototype.jsは1.6.0.1です。
11月 13th, 2008 at 17:18:07
>papi2さん
コメント有難うございます。
ソースコードの全角は気になっていたのですが怠けて直していませんでした。このページは僕のブログでは見てくれている人が少なくないのでいま修正しておきました。ご指摘有難うございます。
ajaxのほうは僕は使っていないのちょっとわかりませんが
additional infoのほうのコメントが活発なので単純なバグならそちらに修正するコードがあるかもしれません。
宜しくお願いします。