ajaxでpagination

またはまった・・・( ゚д゚)

まずajax使うのに躓いた・・・(´・ω・`)
これはcakeのオフィシャルに書いてたから割愛。


何がしかの検索をするのにajaxを利用して動いたからpaginatorヘルパーを使用すべく書いてみる。


・・・

・・・・・・・・

( ゚д゚)<見事に画面が真っ白!!


とうわけで。

paginatorヘルパーに潜る。

paginator.php

function link(){
...
    $obj = isset($options['update']) ? 'Ajax' : 'Html';
...
}

view内での$paginatorに渡す$optionsに 'update' を指定してやる。

$ajaxOption = array(
...
    'update' => 'targetDiv', // 結果書き換えるDOM IDを指定
...
);
$paginator->last('>> last', $ajaxOptions);

これでajaxで指定したDOM IDの内容が書き換えられる。


できたーーー(*´д`)

なんて思っていると検索した条件を引き継げなかったのでまたはまる。
paginatorを使うと↓↓なURLになる

/path..../page:1***

なので、ここに引数として渡してやればいい。

view内

$paginator->options( array(
...
    'url' => array( 'paramA' => 'a', 'paramB' => 'b'),
...
));

これで

/path..../page:1/paramA:a/paramB:b

になって解決(´・ω・`)


~~~~~ おまけ ~~~~~

paginatorはhelperとして'Html'と'Ajax'ヘルパーに依存してて、
上に書いてるように 'update' => **** を指定してやると

paginator.php

function link(略){
...
    return $this->{$obj}->link($title, Set::filter($url, true), $options);
}

なのでどちらかのヘルパーのlinkメソッドに投げているので ajaxのオプションを渡してあげれる。

$ajaxOption = array(
...
    'loading'  => "Element.hide('ajax_submit'); Element.show('ajax_loading');",
    'complete' => "Element.show('ajax_submit'); Element.hide('ajax_loading');",
...
);

なんてして渡すとpaginatorが検索している最中は検索ボタンを隠して、
'now loading...'なんて文字に差し替えたり出来る。

~~~~~ おまけ その2 ~~~~~

paginatoに引数渡してやると 'limit' => 1 を指定したような状況になった。

・・・( ゚д゚)????

また潜る。

controller.php

function paginate(略){
...
    if (isset($options['show'])) {
        $options['limit'] = $options['show'];
    }
...
}

みたいに予約されてるparam名もあるので注意。
たまたま投げたparamがshowって名前だった・・・orz