CakePHP1.1のページングでGETパラメータを正しく引き継ぐ
9月 27th, 2008 admin Posted in CakePHP, PHP |
以前にCakePHP1.1用のPaginationコンポーネントを紹介したんですが、getパラメータに配列を使うと正しくリンクを作ってくれなかったのでそれの補足。
要するにhttp://example.com/?data[Search][name]=1とかって感じの配列がGETパラメータにある場合に、このパラメータを引き継いでくれない(data=Arrayとかってなる)バグを修正した。
/views/helpers/pagination.phpの_generateUrlってメソッドを修正する。
http_build_queryっていう関数を使ったんですが、これは配列もしくはオブジェクトからURL エンコードされたクエリ文字列を生成する関数で、なんと多次元配列にも対応している。さすがPHP!(オブジェクトに対応してるほうが変か)
PHP:
-
function _generateUrl ($page=NULL,$pageDetails=NULL)
-
{
-
$pageDetails = $pageDetails?$pageDetails:$this->_pageDetails;
-
$getParams = $this->getParams; // Import any other pre-existing get parameters
-
if ($this->_pageDetails['paramStyle']=="pretty")
-
{
-
$pageParams=$pageDetails['importParams'];
-
}
-
$pageParams['show'] = $pageDetails['show'];
-
$pageParams['sortBy'] = $pageDetails['sortBy'];
-
$pageParams['direction'] = $pageDetails['direction'];
-
$pageParams['page'] = $page?$page:$pageDetails['page'];
-
{
-
$pageParams['sortByClass'] = $pageDetails['sortByClass'];
-
}
-
if ($pageDetails['paramStyle']=="get")
-
{
-
$getParams = am($getParams,$pageParams);
-
}
-
else
-
{
-
foreach($pageParams as $key => $value)
-
{
-
{
-
if (up($pageDetails['Defaults'][$key])<>up($value))
-
{
-
$prettyString[] = "$key{$pageDetails['paramSeperator']}$value";
-
}
-
}
-
else
-
{
-
$prettyString[] = "$key{$pageDetails['paramSeperator']}$value";
-
}
-
}
-
}
-
-
$url = $this->url;
-
if ($prettyString)
-
{
-
$url .= $prettyString;
-
}
-
if ($getParams)
-
{
-
$url .= "?". http_build_query($getParams);
-
}
-
return $url;
-
}
Leave a Reply