我有一个页面,顶部有一个表单用于选择过滤器。提交时,此表单数据与Zend paginator结合使用以显示结果。但是当我使用paginator翻阅结果时,表单字段会丢失,因为paginator不会发布表单。有没有一种简单的方法来组合这些?由于难以解释,我很难找到这个。
我的控制器属于这种形式......
$form = new Application_Form_Myform();
$request = $this->getRequest();
if ($request->isPost()) {
$data = $request->getPost();
$form->populate($data);
// get the data
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
$reportsTBL = new Model_DBTable_Reports();
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($reportsTBL->getLog($data)));
$paginator->setCurrentPageNumber($this->_getParam('page',1))
->setItemCountPerPage(50);
$this->view->paginator = $paginator
}
$this->view->form = $form;
正如您所看到的,这会从表单中获取值并保留它们以便首次提交。但在随后的分页点击中,它们会丢失。 谢谢!
答案 0 :(得分:2)
不幸的是,你必须再次传递该表单的数据, 所以你可以抛出GET(你可以使用会话,但这是一种更难的方式)。
我在这种情况下的方法是在上次提交时附加该键/值表单的数据 分页网址, 所以当有人点击下一页时,在URL(GET)中将是表单的数据
我在控制器中获取该表单的数据:
//it doesn't matter whether the POST or GET.
$this->_getParam('form_field_name');
如果你想在某些pagination.phtml partial:
中为分页创建该URL$urlParams = array();
foreach (Zend_Controller_Front::getInstance()->getRequest()->getParams() as $urlParamsKey=>$urlParamsVal){
if (!in_array($urlParamsKey, array('module', 'controller', 'action', 'page'))){
$urlParams[$urlParamsKey] = $urlParamsVal;
}
}
// ...
//and than just make URL with URL helper
$this->url(array_merge(array('page' => 1), $urlParams)));
答案 1 :(得分:2)
这么简单,使用Zend Session来保留过滤器。
像这样的东西
$sessionNamespace = new Zend_Session_Namespace('Zend_Searchs');
$sessionNamespace->filter = $this->_request->getParam('filter');
if(isset($sessionNamespace->filter )) {
// do your stuff
}