[英]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.