我想使用Zend_Paginator对搜索结果进行分页。所以我将数据传递给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 :(得分: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 :(得分:1)
我不确定是否理解,但问题是来自网址的网页参数不是通往Paginator的方式 - 例如无论你在哪个页面,它总是显示前20个结果?
如果是这样,您是否尝试在分页器上手动设置页面:
$page = $this->_getParam('page', 1);
$paginator->setCurrentPageNumber($page);
答案 2 :(得分:1)
public function search()
你确定你没有在这里输入错误吗?应该是
public function searchAction()
答案 3 :(得分:0)
您将搜索数据放入$response
,但使用$data
创建了分页器实例(为空)