2010-12-14 9 views
0

ルーティングされたURLからアクセスした場合、結果にページを設定できません。これらは、私が使用しているルートです:CakePHP 1.3.6でページネーション+ルートの問題

// NEWS 
Router::connect('/news.rss', array('controller' => 'posts', 'action' => 'index', 'ext' => 'rss')); 
Router::connect('/news/*', array('controller' => 'posts', 'action' => 'index')); 
Router::connect('/:lang/posts/*', array('controller' => 'posts', 'action' => 'index')); 

私は最後のルートで私は渡していないよということを知っている:LANGパラメータを、私はそれを渡す場合:

Router::connect('/:lang/news/*', array('controller' => 'posts', 'action' => 'index'), array('lang' => $regex['lang'], 'pass' => array('lang'))); 

それはありませんいずれかの作業。

url/news/page:2にアクセスしようとすると、最初のページの結果が表示されます。

Array 
(
[lang] => ca 
[named] => Array 
    (
     [page] => 2 
    ) 

[pass] => Array 
    (
    ) 

[controller] => posts 
[action] => index 
[plugin] => 
[url] => Array 
    (
     [ext] => html 
     [url] => ca/posts/page:2 
    ) 

[form] => Array 
    (
    ) 
[...] 
) 

配列のこの部分(IはI'LLいくつかの部分をommitedました:私は、それは正しくページ数をとるかどうかを確認するためにparamsは、と、まず第一に、それがない>の$ this - をプリントアウト2および/ポスト/インデックス/ページ::私がアクセスした場合に/ニュース/ページと同じです)後でお見せ

Array 
(
[...] 
[paging] => Array 
    (
     [Post] => Array 
      (
       [page] => 1 
       [current] => 3 
       [count] => 3 
       [prevPage] => 
       [nextPage] => 
       [pageCount] => 1 
       [defaults] => Array 
        (
         [limit] => 3 
         [step] => 1 
         [order] => Post.created DESC 
         [conditions] => Array 
          (
           [Post.active] => 1 
           [Post.page] => 
           [0] => Post.public_date <= NOW() 
          ) 

        ) 

       [options] => Array 
        (
         [page] => 1 
         [limit] => 3 
         [order] => Post.created DESC 
         [conditions] => Array 
          (
           [Post.active] => 1 
           [Post.page] => 
           [0] => Post.public_date <= NOW() 
          ) 

        ) 

      ) 

    ) 

あなたはそれはdoesnのことを見ることができます:2は、しかし、あなたは、この部分に見ている場合ページ番号を正しく入力してください。しかし、私が/ posts/index/page:2からアクセスすると、数字がうまくいき、ページネーションが機能します。

URLがきれいだっただけでは気にしませんが、サイトが多言語であることを考えれば、少なくとも/ en/posts/index/page:2(または/ en/news/page) :2)...ここで

は私の完全なroutes.phpのファイルです:

http://pastebin.com/th4hLZNz

誰もが発生しているかのアイデアを持っていますか?

ありがとうございます。

答えて

0

最後に解決策が見つかりました。実際、それは簡単で、最大の問題は、私がそれを適切に集中させなかったことでした。私は何かが間違っていると思うルートに焦点を当てましたが、問題はコントローラでした。ここで

問題ました:

$this->paginate['conditions'] = array(
    'Post.active' => true, 
    'Post.page' => $page, 
    'Post.public_date <= NOW()'); 

$this->paginate['group'] = 'Post.id'; 

グループ(条件付きconvinationでは)paginateCount機能がうまく結果をカウントすることはできません。

/** 
* This method fixes the count query 
* when there's a GROUP BY on it 
* 
* @return integer 
*/ 
public function paginateCount($conditions = null, $recursive = 0, $extra = array()) 
{ 
    $parameters = compact('conditions', 'recursive'); 
    $params = array(); 
    if (isset($extra['group'])) 
    { 
     $params = array_merge(array(
      'fields' => array(
       'COUNT(DISTINCT(' . $this->alias . '.' . $this->primaryKey . ')) AS `count`' 
      ) 
     ), $parameters); 
    } 
    else 
    { 
     $params = array_merge($parameters, $extra); 
    } 
    return $this->find('count', $params); 
} 

そして今、うまく

を動作するようだ:だから私はポストのモデルは、グループ条件の欠落に私自身のpaginateCount機能を作成しました