禁用CakePHP中的某些视图的分页

时间:2014-01-19 20:13:08

标签: php cakephp pagination

在使用GoogleMapsv3帮助器的CakePHP 2.4应用程序中,我有两个视图:分页列表视图和谷歌地图视图。我想在地图视图上显示所有标记,但是当我使用foreach循环将它们回显到Google地图时,分页帮助程序会逐步进入,并且一次只回显20个标记。

如何在地图视图中禁用PaginatorHelper,以便显示所有结果?

我的foreach循环,被分页助手打断:

foreach ($posts as $post):
  $marker_options = array(
     'showWindow' => true,
     'windowText' => '<b>' . $post['Post']['title'] . '</b>' . '<br>' . $post['Post']['body'],
     'markerTitle' => '',
     'markerIcon' => 'http://labs.google.com/ridefinder/images/mm_20_green.png',
     'markerShadow' => 'http://labs.google.com/ridefinder/images/mm_20_greenshadow.png',
  );
 echo $this->GoogleMap->addMarker(
    "map_canvas",
    $post['Post']['id'], array(
        'latitude' => $post['Post']['lat'],
        'longitude' => $post['Post']['lng']
                                ), 
        $marker_options);


endforeach; ?>

2 个答案:

答案 0 :(得分:1)

这应该发生在您的控制器中。

假设您有一个变量,它会产生差异,让我们说您的网址是:

http://your.server.com/posts/index (for paginated posts)

http://your.server.com/posts/index/map for your map view
在控制器中

,您应该执行以下操作:

class PostsController extends AppController{
    function index($isMap = null){
      if($isMap == 'map'){
         $this->set('posts', $this->Post->find('all', ...));
      } else {
         $this->set('posts', $this->paginate());
    }
}

这样,根据网址,您将返回完整或分页结果。请记住,加载所有结果,特别是如果添加某种关系可能会降低页面速度。

答案 1 :(得分:0)

解决方案实际上非常简单。除非特别调用,否则分页器不会启动:我最初从我的索引方法复制了我的map方法,该方法也复制了paginator。愚蠢的错误。

有效的方法:

public function map() {
    $this->Post->recursive = 0;
    $this->set('posts', $this->Post->find('all'));
}