2011-03-30 111 views
2

我想用Zend_Paginator分页搜索结果。所以,我把我的数据到分页程序实例:如何分页搜索结果?

$paginator = new Zend_Paginator ( 
      new Zend_Paginator_Adapter_DbSelect ($data) 
); 

数据返回这样

public function getData($idArray){ 
     $db = Zend_Db_Table::getDefaultAdapter(); 
     $selectProgramme = new Zend_Db_Select($db); 

     $selectProgramme->from('programme') 
          ->order('id DESC') 
          ->where('id IN(?)', $idArray); 

     return $selectProgramme;   
} 

$idArray是由我的搜索实现提供。这一切都很好,我得到正确的数据和分页链接显示。

但是我无法对结果进行分页,因为分页链接无效。所以正常的分页将有以下链接:

mysite.de/home/index/page/1 
在搜索

我现在有

mysite.de/home/search/page/1 

这是行不通的。任何建议如何实现搜索分页?

编辑:我有一个HomeController两个行动,索引和搜索行动。 IndexAction显示所有数据,我可以对它进行分页。

public function indexAction(){ 
    //... 
    $paginator = new Zend_Paginator(
       new Zend_Paginator_Adapter_DbSelect($data) 
    ); 
    $paginator->setItemCountPerPage(16) 
       ->setPageRange(20) 
       ->setCurrentPageNumber($this->_getParam('page', 1)); 

    $this->view->data = $paginator; 
} 

的searchActions处理搜索过程:

public function searchAction(){ 
    $response = $solr->search($this->getRequest()->getParam('search', null)); 
    //...if items found get the data exactly the same way as in the 
    // index action, using Zend_Paginator_Adapter_DbSelect 
    $paginator = new Zend_Paginator(
       new Zend_Paginator_Adapter_DbSelect($data) 
    ); 
    $paginator->setItemCountPerPage(16) 
       ->setPageRange(20) 
       ->setCurrentPageNumber($this->_getParam('page', 1)); 

    $this->view->data = $paginator; 
} 

所以像你在搜索行动看到有一个问题,搜索过程中,当我分页。我需要决定是否搜索或分页。对此有何建议?

+0

发布整个操作代码,因为我不明白你得到的路由过程的结果。你是否正在使用searchAction或indexAction进行分页? – Ololo 2011-03-30 19:30:10

+0

我更新了我的问题,希望现在清楚。 – 2011-03-30 20:02:47

回答

2

由于搜索需要的,因为分页时,搜索参数为空搜索参数分页会失败。

$sreq = $this->getRequest()->getParam('search', null); 

所以我们需要传递这个参数,每当我们分页我们的搜索。我解决这个使用Zend_Session

//get search param 
$sreq = $this->getRequest()->getParam('search', null); 
//store search param in session for pagination 
$search = new Zend_Session_Namespace('PSearch'); 

if($sreq != null){ 
    $search->psearch = $sreq; 
}else{ 
    $sreq = $search->psearch; 
} 

我有这个在我searchAction的顶部和一切正常。

1

不知道我明白,但是你的问题是,从网址的页面参数是不是让它的方式来分页 - 例如,无论你在哪个页面上,它总是显示前20个结果?

如果是这样,你有没有尝试过手动设置的分页程序的页面:

$page = $this->_getParam('page', 1); 
$paginator->setCurrentPageNumber($page); 
+0

看看我的更新。当我将页面更改为两页时,按预期方式获得第二页,使用分页链接导航无法正常工作,因为我需要以某种方式修改searchAction – 2011-03-30 20:06:33

+0

对不起,我不明白问题是什么... – robertlbolton 2011-03-30 20:18:06

+0

我无法分页搜索结果,就是这样。想象一下,我做了一个搜索。那么该路线看起来像mysite.net/home/search。但是当我尝试分页时,它尝试访问mysite.net/home/search/page/2,并失败,因为他再次运行搜索,但他不应该... – 2011-03-30 20:21:48

1
public function search() 

你确定你没有在这里输错?应该

public function searchAction() 
+0

什么$ solr-> search(null)将返回?这可能导致没有项目分页? – Ololo 2011-03-30 20:22:18

0

你把你的搜索数据为$response但要使用$data分页程序实例(为null)