電子書籍の厳選無料作品が豊富!

CakePHPのPaginatorを使ったページリンクが正しく出力されません。
1ページ目は正しく出力できていますが、2ページ目などに移動した際にURLがおかしくなります。

現状

1ページ目
http://www.example.com/hoge/2

2ページ目
http://www.example.com/hoge/2/page:3

理想

1ページ目
http://www.example.com/hoge/2

2ページ目
http://www.example.com/hoge/3

また、パラメータがついた場合も

1ページ目
http://www.example.com/hoge/2?hoge=hoge

2ページ目
http://www.example.com/hoge/3?hoge=hoge

となるようにしたいのですが、何を間違えているのでしょうか。
ちなみにソースは以下のようになってます。

View/Hoge.php
echo $this->Paginator->prev('< 前へ', array(), null, array('class' => 'prev disabled'));
echo $this->Paginator->numbers(array('separator' => ''));
echo $this->Paginator->next('次へ >', array(), null, array('class' => 'next disabled'));

Config/routes.php
Router::connect(
    '/hoge/:page',
    array(
        'action' => 'hoge',
    ),
    array(
        'pass' => array(
            'page',
        )
    )
);

A 回答 (1件)

いやいや、おかしくないですw



> 2ページ目
> http://www.example.com/hoge/2/page:3

page:3はCakePHPで言うnamedパラメータと呼ばれるものです。
コントローラで$this->request->params['named'] をダンプすると表示されます。
このnamedパラメータはCakePHPでは良く出てきます。

> 理想

確かにRouterを駆使したら出来るかもしれないけど、ページネーションはページ数だけ維持するとは限りません。
Bakeしたソースだと一覧(index)で表のタイトルをクリックしたらそのカラムで並べ替え(昇順/降順)が可能で、その並べ替えの状態を維持してページングを維持してますが、ソート対象のカラムや並び順もnamedパラメータに乗せてページ遷移してるから状態維持できるんですよ。
次のページに行ったらID順に戻ってたらページングにならんでしょ?

Routerに小細工するとそういうケースが出てきて行き詰まる要因になります。
やるとしてももうちょっと熟練されてからが良いかと。

> また、パラメータがついた場合も

?パラメータのことをQueryStringと言いますが、これはコントローラ側で設定します。
やり方は参考URLを参照してみて下さい。

> パラメータをクエリストリングで指定できるような設定もあるようだ。下記のようにparamTypeにquerystringを設定すると、「?page=2」のような指定で遷移した。

の箇所

参考URL:http://j-caw.co.jp/blog/?p=264
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!