[英]PartialLoop with Zend_Paginator Object Issue
是否可以在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
并且从paginator传递的其他值在那里但在$this->key
而不是$this->paginator->key
应该是
PartialLoop
本质上为传递给它的数组或Traversable
对象中的每个元素运行Partial
。 因此,到部分视图脚本时,您将不再使用Paginator
对象,而是使用其分页的内容。
在部分循环中, setObjectKey()
在部分级别上工作。 您可以将Traversable
对象数组(或Traversable
对象的Traversable
对象)传递给部分循环,然后在部分循环中,每个对象都可以通过对象键进行访问。
但是,您正在使用的DbSelect
分页器适配器为每个页面返回一个行数组 ,因此在paginator
对象键中没有要放置的任何对象,并且它保持未使用状态。
您应该改用DbTableSelect
适配器,它将返回一个行集。
如果您需要访问Paginator本身,则应改用Partialator。 这样,您可以使用setObjectKey()
自己遍历分页器中的页面。
我建议您在某些无法按您期望的方式工作时,将Zend Framework的源代码放在手边。 可悲的是,通过阅读代码比阅读文档更能成功地弄清楚如何使用它。
实际上,您提供的示例代码是非常正确的,尽管我使用Zend_Paginator_Adapter_DbTableSelect作为适配器,但设置却非常相似。 因此,原则上绝对有可能。
值得在控制器操作中检查从fetchPaginated()返回的内容。
可能值得检查的另一件事是$ view-> paginator是否不会在您的视图脚本中被覆盖(由于不同的原因,这是一件坏事)。 另外,您实际上可以使用对象键名来玩,例如在setObjectKey()中使用“模型”代替“ paginator”。
PS不确定是否相关,但是我在控制器中设置了对象密钥:
$this->view->partialLoop()->setObjectKey('model');
$this->view->partial()->setObjectKey('model');
Zend_Paginator_Adapter_DbSelect
的getItems()
方法返回Zend_Paginator_Adapter_DbTableSelect
行集的数组和getItems()
方法,仅使用Zend_Paginator_Adapter_DbTableSelect
,而不是Zend_Paginator_Adapter_DbSelect
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.