是否可以在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
因为它们应该是
答案 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
...