2010-12-14 42 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')); 

我知道,在过去的路线,我没有通过:郎参数,但如果我将它传递:

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

它不工作。

如果我尝试访问url/news/page:2,它会显示第一页的结果。我打印出来,这 - $> PARAMS,看它是否正确需要的页码,并在一审中,它的作用:

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 
    (
    ) 
[...] 
) 

阵列的这部分(我中省略了一些零件,我会以后告诉你)是相同的,如果我访问/新闻/页:2和/职位/索引/页: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() 
          ) 

        ) 

      ) 

    ) 

你可以看到,它不”请正确输入页码。但是,如果我从/ posts/index/page访问,它需要编号和分页工作。

如果只是很漂亮的网址不打扰我,但考虑到该网站是多语言的,我至少需要那个作品,如果我访问/ 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函数计算的结果良好。所以我创建缺少组条件对邮政的型号我自己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); 
} 

而现在看来效果不错