簡體   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