带有Zend_Paginator对象问题的PartialLoop

时间:2010-02-01 11:26:51

标签: php zend-framework zend-paginator

是否可以在Zend_Paginator对象中使用findParentRow()方法?我正在尝试一些在数据库结果集中fetchAll返回的对象上运行正常的代码并且工作正常。使用Zend_Paginator对象它不起作用。

在我的控制器中我有:

public function downloadedAction()
{
    $images = new Model_ApplicationImages();
    $paginator = $images->fetchPaginated();
    $paginator->setCurrentPageNumber($this->_getParam('page'));
    $this->view->paginator = $paginator;
}

在我的模特中我有:

public function fetchPaginated()
{
    $select = $this->select()
                   ->from($this->_name)
                   ->where('status = ?','approved')
                   ->where('downloaded = ?','0');
    $adapter = new Zend_Paginator_Adapter_DbSelect($select);
    $paginator = new Zend_Paginator($adapter);
    $paginator->setItemCountPerPage(10);
    return $paginator;
}

在我看来,我有:

    $this->partialLoop()->setObjectKey('paginator');
    echo $this->partialLoop('admin/list-downloaded.phtml', $this->paginator); 

和部分:

    $this->paginator->findParentRow('Model_Application')->name

虽然对象键未被使用或未正确设置,但在部分var_dump($this->paginator)NULL$this->key,并且从分页器传递的其他值在{{1而不是$this->paginator->key因为它们应该是

3 个答案:

答案 0 :(得分:3)

PartialLoop基本上为数组中的每个元素或传递给它的Partial对象运行Traversable。因此,当它到达您的部分视图脚本时,您不再使用Paginator对象,而是使用其分页内容。

在部分循环中,setObjectKey()在部分级别工作。您可以将Traversable个对象(或遍历Traversable个对象的Traversable对象)数组传递给部分循环,然后在部分中,每个对象都可以通过对象键访问。

您正在使用的DbSelect paginator适配器会为每个页面返回一行数组,因此paginator中没有任何对象可以放入对象键,它仍未使用。

您应该使用DbTableSelect适配器,它将返回行集。

如果您需要访问Paginator本身,则应使用partial。这样您就可以使用setObjectKey()自行遍历分页器中的页面。

我建议你保留Zend Framework的源代码,当某些东西不能按照你期望的方式工作时。可悲的是,通过阅读代码而不是通过阅读文档,我已经更成功地弄清楚如何使用它。

答案 1 :(得分:1)

实际上你提供的示例代码非常正确,我的设置非常相似,尽管我使用Zend_Paginator_Adapter_DbTableSelect作为适配器。所以,原则上肯定是可能的。

值得检查控制器操作中从fetchPaginated()返回的内容。

另一件可能值得检查的事情是,$ view-> paginator是否不会在您的视图脚本中被覆盖(由于各种原因,这是一件坏事)。另外,您实际上可以使用对象键名称,例如在setObjectKey()中使用“model”而不是“paginator”。

P.S。不确定它是否相关,但我在控制器中设置了对象键:

$this->view->partialLoop()->setObjectKey('model');
$this->view->partial()->setObjectKey('model');

答案 2 :(得分:1)

getItems() Zend_Paginator_Adapter_DbSelect方法返回getItems()行集的数组和Zend_Paginator_Adapter_DbTableSelect方法,只使用Zend_Paginator_Adapter_DbTableSelect,而不是Zend_Paginator_Adapter_DbSelect ...