CakePHP Note (v1.3) > コントローラー > ページング > Ajaxを使ったページネーション

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

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

コントローラの修正

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


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

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

}

ビューの修正

paginatorヘルパーの設定

paginatorヘルパーが出力するリンクをAjax仕様にします。paginatorヘルパーのoptionsメソッドの'update' キーに更新するDOMエレメントを指定します。'update' キーに値をセットする事で出力するリンクをAjax仕様になります。
特に指定しない限りpaginatorヘルパーはJsヘルパーをインポートして使います。

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

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

レイアウト

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

CakePHP Note (v1.3)

Index