【问题标题】:Zend_Paginator stopped workingZend_Paginator 停止工作
【发布时间】:2011-07-19 05:46:24
【问题描述】:

我正在学习 Zend 框架。我让 Zend_Paginator 与数组适配器一起工作,但我在使用 Zend_Paginator::factory 静态方法时遇到了问题。问题是分页控制链接将我发送到正确的 URL,但是当我单击下一步或第 2、3 页等时,结果消失了。

我有两个来自数据库的表:一个文件表和一个 origination_office 表。文件表包含客户的姓名、地址等,发起办公室存储办公室名称(如 Tampa、Sarasota 等)。每个文件都与一个原始办公室相关联。

我的控制器:

public function searchAction()
{

    $searchForm = new Application_Form_SearchForm();
    if ($this->_request->getQuery()) {
        if ($searchForm->isValid($this->_request->getParams())) {
            $officeName = $this->_request->getParam('officeName');
            $page = $this->_request->getParam('page');
        }
        $fileTable = new Application_Model_DbTable_File();
        $this->view->paginator = $fileTable->getFilesByOfficeName($officeName, $page);

    }
    $this->view->searchForm = $searchForm;
}

这里是 getFilesByOfficeName() 方法:

public function getFilesByOfficeName($officeName = null, $page = 1, $count = 12, $range = 15, $scrolling = 'Sliding') 
{
    if (is_null($officeName)) {
        $query = $this->select();
        $paginator = Zend_Paginator::factory($query);
    } else {
        $oofTable = new Application_Model_DbTable_OriginationOffice();
        $query = $oofTable->select();
        $query->where('oof_name like ?', $officeName.'%');
        if ($oofTable->fetchRow($query)) {
            $origination_office = $oofTable->fetchRow($query);
            $files = $origination_office->findDependentRowset($this);
            $paginator = Zend_Paginator::factory($files);
        } else {
            return;
        }
    }
    Zend_Paginator::setDefaultScrollingStyle($scrolling);
    Zend_View_Helper_PaginationControl::setDefaultViewPartial('_pagination_control.phtml');
    $paginator->setDefaultItemCountPerPage($count);
    $paginator->setDefaultPageRange($range);
    $paginator->setCurrentPageNumber($page);
    return $paginator;
}

【问题讨论】:

  • 我不明白这个问题。失败点在哪里? $fileTable->getFilesByOfficeName($officeName, $page);可以返回false,你排除你的分页器被退回了吗?
  • @brady.vitrano 似乎返回了分页器(即不是假的),但是当我尝试单击任何其他页面时,分页器消失了(结果集?)因为 $_GET[ 'officeName'] 参数似乎是必需的。但我不确定如何继续提供它(即分页器控件中的链接不提供 officeName 值)。

标签: zend-framework zend-paginator


【解决方案1】:

好的,我想我理解你的问题了。您的链接没有维护您的初始请求状态及其 URL 查询字符串。

您可能想要编辑部分视图 (_pagination_control.phtml) 以在链接中呈现当前查询字符串。

我需要看看你在部分中做了什么才能给出准确的答案,但如果你在最终 URL 的末尾添加 ?$_SERVER['QUERY_STRING'] 这应该会起作用。请参阅下面的示例:

<!-- Your href may look different but notice I append the query string to the end -->
<a href="<?php echo $this->url(array('page' => $this->last)); ?>?<?php echo $_SERVER['QUERY_STRING'];?>">Last &raquo;</a>

【讨论】:

  • Zend_Paginator 不会做一些事情,其中​​之一就是构建您的 HTML。这就是局部视图的目的。
  • 这绝对有效。谢谢你。但是我的代码是否存在阻止 Zend_Paginator 自动执行此操作的问题?看起来这应该是一个特性,也就是说,我不需要硬编码进去。
猜你喜欢
  • 1970-01-01
  • 2015-01-02
  • 2012-06-14
  • 2019-02-07
  • 2018-07-18
  • 2014-07-20
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多