この話題はFuelPHP1.4に適応されます。
FuelPHPのPaginationClassは以下のように設定します。
$pagination = Pagination::forge('mypagination', array( 'pagination_url' => 'http://docs.fuelphp.com/', 'total_items' => 35, 'per_page' => 5, 'uri_segment' => 2, ));
※これは公式サイトのPagenation ClassのHow toに書いてある通りの設定です。
これを以下のように書くとちゃんと動きません。
$pagination = Pagination::forge('mypagination', array( 'pagination_url' => 'http://docs.fuelphp.com/', 'uri_segment' => 2, 'total_items' => 35, 'per_page' => 5, ));
※これは公式サイトのPagenation Classのforgeに書いてある通りの設定です。
違いは配列の順番です。
前者はuri_segmentがtotal_itemsとper_pageの上にあります。
後者の設定で $pagination->render()すると、5ページ目からおかしくなります。
$paginationをvar_dumpすると、5ページ目ですから、current_pageがint 5でなくてはいけないのに、float 4になってしまいます。
原因はpagination classにおいて、uri_segmen、total_items、per_pageを内部変数にすべてセットしてからtotal_pagesを計算しなければいけないのに、_set関数で1つ値をセットするたびに_recalculate関数でtotal_pagesを計算してしまっていて、per_pageはpagination class内部においてデフォルトで10という値が設定されているのですが、total_pagesを10で計算してしまった結果、おかしくなっています。
ええと…修正方法ですがpagination classは後から値をセットするようにできていないので
\core\classes\pagination.php
public function __set($name, $value = null)
FuelPHPのPaginationClassは以下のように設定します。
$pagination = Pagination::forge('mypagination', array( 'pagination_url' => 'http://docs.fuelphp.com/', 'total_items' => 35, 'per_page' => 5, 'uri_segment' => 2, ));
※これは公式サイトのPagenation ClassのHow toに書いてある通りの設定です。
これを以下のように書くとちゃんと動きません。
$pagination = Pagination::forge('mypagination', array( 'pagination_url' => 'http://docs.fuelphp.com/', 'uri_segment' => 2, 'total_items' => 35, 'per_page' => 5, ));
※これは公式サイトのPagenation Classのforgeに書いてある通りの設定です。
違いは配列の順番です。
前者はuri_segmentがtotal_itemsとper_pageの上にあります。
後者の設定で $pagination->render()すると、5ページ目からおかしくなります。
$paginationをvar_dumpすると、5ページ目ですから、current_pageがint 5でなくてはいけないのに、float 4になってしまいます。
原因はpagination classにおいて、uri_segmen、total_items、per_pageを内部変数にすべてセットしてからtotal_pagesを計算しなければいけないのに、_set関数で1つ値をセットするたびに_recalculate関数でtotal_pagesを計算してしまっていて、per_pageはpagination class内部においてデフォルトで10という値が設定されているのですが、total_pagesを10で計算してしまった結果、おかしくなっています。
ええと…修正方法ですがpagination classは後から値をセットするようにできていないので
\core\classes\pagination.php
public function __set($name, $value = null)
{
//中略
//中略
// update the page counters
//$this->_recalculate(); ←ここをコメントアウト
}
}
でいいかなと思います。
または、total_itemsを配列の一番先に書くのでもいいと思います。
もしかしたら1.5以降で直っているかもしれませんが、はまる方がいらっしゃるかもしれませんので、記録しておきます。
public function __construct($config = array())
{
// update the instance default config with the data passed
foreach ($config as $key => $value)
{
$this->__set($key, $value);
}
$this->_recalculate(); ←これを追加
でいいかなと思います。
または、total_itemsを配列の一番先に書くのでもいいと思います。
もしかしたら1.5以降で直っているかもしれませんが、はまる方がいらっしゃるかもしれませんので、記録しておきます。