如何使用Zend paginator保留表单值

时间:2012-10-03 16:40:02

标签: zend-framework pagination

我有一个页面,顶部有一个表单用于选择过滤器。提交时,此表单数据与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;

正如您所看到的,这会从表单中获取值并保留它们以便首次提交。但在随后的分页点击中,它们会丢失。 谢谢!

2 个答案:

答案 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
}