1

findParentRow()Zend_Paginatorオブジェクト内からメソッドを使用することは可能ですか?DB結果セットから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$this->paginator->key

4

3 に答える 3

3

PartialLoop基本的に、渡されPartialた配列またはオブジェクトの各要素に対して a を実行します。Traversableしたがって、部分ビュー スクリプトに到達するまでには、Paginatorオブジェクトではなく、ページ分割されたコンテンツを操作することになります。

部分ループでは、setObjectKey()は部分レベルで機能します。オブジェクトの配列Traversable(またはTraversableオブジェクトを反復処理するTraversableオブジェクト) を部分ループに渡すことができます。部分ループでは、オブジェクト キーを介して各オブジェクトにアクセスできます。

DbSelectただし、使用しているページネーター アダプターは各ページの行の配列を返すためオブジェクト キーに配置するオブジェクトはなく、paginator未使用のままです。

DbTableSelect代わりに、行セットを返すアダプターを使用する必要があります。

Paginator 自体にアクセスする必要がある場合は、代わりにパーシャルを使用する必要があります。そうすればsetObjectKey()、ページネーターのページを自分でループするために使用できます。

何かが期待どおりに動作しない場合は、Zend Framework のソース コードを手元に置いておくことをお勧めします。悲しいことに、私はドキュメントを読むよりもコードを読んだ方が、使い方を理解することに成功しました。

于 2010-02-08T20:56:01.113 に答える
1

実際、提供したサンプルコードは非常に正確です。アダプターとしてZend_Paginator_Adapter_DbTableSelectを使用しましたが、セットアップは非常に似ています。ですから、原則としては間違いなく可能です。

コントローラアクションで、fetchPaginated()から何が返されるかを確認する価値があります。

おそらくチェックする価値のあるもう1つのことは、$ view-> paginatorがビュースクリプトで上書きされないかどうかです(これは別の理由で悪いことです)。さらに、実際にはオブジェクトキー名で遊ぶことができます。たとえば、setObjectKey()で「paginator」の代わりに「model」を使用します。

PS関連性があるかどうかはわかりませんが、コントローラーでオブジェクトキーを設定します。

$this->view->partialLoop()->setObjectKey('model');
$this->view->partial()->setObjectKey('model');
于 2010-02-03T13:10:48.790 に答える
1

配列getItems()を返すメソッドと行セットのメソッドは、 ...ではなくを使用するだけです。Zend_Paginator_Adapter_DbSelectgetItems()Zend_Paginator_Adapter_DbTableSelectZend_Paginator_Adapter_DbTableSelectZend_Paginator_Adapter_DbSelect

于 2011-10-21T18:59:54.897 に答える