1

我有一个页面,顶部有一个用于选择过滤器的表单。提交时,此表单数据与 Zend 分页器结合使用以显示结果。但是当我使用分页器对结果进行分页时,表单字段会丢失,因为分页器不会发布表单。有没有简单的方法来组合这些?我很难找到这个,因为它很难解释。

我的控制器是这种形式...

    $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;

如您所见,这会从表单中获取值并保留它们以供首次提交。但是在随后的分页点击中,他们迷路了。谢谢!

4

2 回答 2

2

不幸的是,您必须再次传递该表单的数据,因此您可以抛出 GET(您可以使用 session,但这是一种更难的方法)。

在这种情况下,我的方法是将上次提交的键/值表单的数据附加到分页 URL,因此当有人单击下一页时,URL(GET) 中的数据将是表单的数据

我在控制器中获得了该表单的数据:

//it doesn't matter whether the POST or GET.
$this->_getParam('form_field_name');  

如果要在某些 pagination.phtml 部分中创建分页 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)));
于 2012-10-04T08:26:17.487 回答
2

如此简单,使用Zend Session来保留您的过滤器。

像这样的东西

$sessionNamespace = new Zend_Session_Namespace('Zend_Searchs');
$sessionNamespace->filter = $this->_request->getParam('filter');
if(isset($sessionNamespace->filter )) {
// do your stuff
}
于 2012-10-04T08:39:00.560 回答