Zend framework Zend-如何在同一视图中组合表单和分页

Zend framework Zend-如何在同一视图中组合表单和分页,zend-framework,pagination,Zend Framework,Pagination,这可能比看起来更简单,但我被难倒了。我有一个简单的控制器,它构建了一个用于输入参数的小表单。提交表单时,同一页面将被重新绘制,顶部为同一表单,但下方为结果分页视图。我的控制器在这里: public function indexAction() { $form = new Application_Form_Battery(); $request = $this->getRequest(); if ($request->isPost()) { $

这可能比看起来更简单,但我被难倒了。我有一个简单的控制器,它构建了一个用于输入参数的小表单。提交表单时,同一页面将被重新绘制,顶部为同一表单,但下方为结果分页视图。我的控制器在这里:

public function indexAction()
{
    $form = new Application_Form_Battery();

    $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->getBatteryLog($data)));
        $paginator->setCurrentPageNumber($this->_getParam('page',1))
              ->setItemCountPerPage(50);
        $this->view->paginator = $paginator;
    }   
    $this->view->form = $form;
}

如您所见,表单提交后,分页结果将被view->form语句覆盖。。。提交表单后如何合并它们?我不能有两个视图调用

这里有些东西没有经过测试

indexController

    public function indexAction()
    {
                .....
            $_category = new Admin_Model_DbTable_Category();
            $category = $_category->browse($browseArray);
            $this->view->vCount = count($category);
        $paginator = Zend_Paginator::factory($category);
        $page = ($postData['page'] > 0) ? $postData['page'] : 1;
        $paginator->setCurrentPageNumber($page); 
        $paginator->setItemCountPerPage(10);
        $paginator->setPageRange(5);
        $this->view->categoryList   = $paginator;  // print_obj($paginator);
....
}
index.phtml

.....
<ul>
     <?php if (count($this->categoryList) != 0) { ?>
       <?php
         foreach ($this->categoryList AS $key => $category) {
           ?>
             <li>

               <div >
                   <?php echo $category['name'] ?>

               </div>
              </li>
         <?php } ?>
         <li>
            <div><?php echo "Total Category(" . $this->vCount . ")"; ?></div>
                                <div style="text-align:center;"><?php echo $this->paginationControl($this->categoryList, 'Sliding', 'pagination.phtml'); ?></div>
                            </li>
                            <?php } else { ?>
                            <li><div style="text-align:center;">No records found</div></li> 
                    <?php } ?>
                    </ul>
...

您可以使用名为browse的通用函数,该函数将从表中获取结果,通过使用结果,我们可以在页面呈现时对数据进行分页。

我解决了这个问题。我使用了一个称为表单模板的视图,并试图在该表单上显示分页结果。我将分页结果移动到实际的视图脚本,所有问题都解决了


谢谢你的帮助。

我觉得很好。您所说的“提交表单后如何合并它们”是什么意思。顺便说一句:我可能会使用
GET
方法而不是
POST
提交表单:没有刷新问题、url可寻址结果页等。要清楚,我在控制器中转储paginator,并看到三条记录。我在视图中转储$this->paginator,它是空的。我有超过2800万行。无法检索所有数据。:)
class Admin_Model_DbTable_Category extends Zend_Db_Table_Abstract
{
...
    protected $_name = 'category';
    protected $_primary = 'category_id';


    public function browse($browseArray = array()) 
    {
        extract($browseArray);

        $whereSQL       = ' `parent` = 0 ';

        if($category_id)                
            $whereSQL   .= ' AND `category_id` = "'. $category_id .'"';
        if($catname)
            $whereSQL   .= ' AND `name` = "'. $catname .'"';
        if($name)
            $whereSQL   .= ' AND `name` LIKE "%'. $name .'%"';  
        if($description)
            $whereSQL   .= ' AND `description` LIKE "%'. $description .'%"';    
        if($status) 
            $whereSQL   .= ' AND `status` = "'. $status .'"';   

        $select         = $this->_db->select()
                            ->from($this->_name)
                            ->where($whereSQL);
        $result         = $this->getAdapter()->fetchAll($select);

        return $result;
    }
    ....
}