繁体   English   中英

带有Zend_Paginator对象的PartialLoop问题

[英]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_DbSelectgetItems()方法返回Zend_Paginator_Adapter_DbTableSelect行集的数组和getItems()方法,仅使用Zend_Paginator_Adapter_DbTableSelect ,而不是Zend_Paginator_Adapter_DbSelect ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM