test

CakePHP Note

Ajaxを使ったページネーション

UPDATE:2008.05.07

ページネーションをAjaxを使って行なう事もできます。通常のページネーションに少しだけ手を加えます。

コントローラの修正

通常、Ajaxを処理する場合はヘッダーやフッターのないAjax専用のレイアウトを使用します。コントローラで明示的にAjax専用のレイアウトを指定するか、RequestHandlerコンポーネントを利用します。RequestHandlerコンポーネントを利用すると、リクエストの種類に応じてレイアウトが切り替わります。Ajaxによるリクエストの場合は、レイアウトは「ajax」になり、通常のリクエストの場合のレイアウトは「default」になります。

RequestHandlerコンポーネントを利用する方法

PostsController extends AppController
{
    var $components = array('RequestHandler'); 
    function index(){
        $this->set('posts',$this->paginate());
    }

}


ビューの修正

レイアウト

大枠のレイアウトとAjaxで更新する部分のレイアウトの2つを使用します。
大枠のレイアウトではprototype.jsを読み込むようにします。また、Ajaxでロード中である事を示すインジケータ用のDOMエレメントを配置する事もあります。
Ajaxで更新する部分のレイアウトはRequestHandlerコンポーネントによって自動的に「ajax」に設定されます。レイアウト「ajax」のファイル名は「ajax.ctp」で標準で用意されいますので、自作する必要は有りません。

アクションに対するビューの修正

更新するDOMエレメントをpaginatorヘルパーのoptionsメソッドで指定します。

$paginator->options(array('update' => 'dbrower', 'indicator' => 'spinner'));

上記のオプションはAjaxヘルパーでよく使うオプションです。updateで更新するDOMエレメントのID, indicatorでロード中でに表示するインジケータ用DOMエレメントのIDをそれぞれ指定します。