8

コントローラー アクションに特定のページネーション変数が必要です。

そのような:

1.現在のページ番号

2.現在のページオフセット

3.総表示件数

つまり、2005 年のレコードのうち 31 ~ 40 件が表示されます

私は次のことを試しました:

$dataProvider = NodesTerms::getNodesDataFromTerms($nodeId) ;     
  $pagination = $dataProvider->getPagination();
  var_dump($pagination->getPageCount());
  //var_dump($pagination->currentPage);

Pagination オブジェクトを取得できますが、ゼロ (0)$pagination->currentPage など$pagination->offset....

titleこの情報は、メタ ページを動的に生成descriptionし、pagetitle などのページ リストを含むアクションで必要です: American Recipes のページ 3/10...

これについての助けに感謝します。

4

2 に答える 2

5

itemCountで明示的に設定してみてくださいdataProvider

'pagination'=>array(
    'pageSize'=>10,
    'itemCount'=>$count
)

または、新しいCPaginationオブジェクトを使用します。

$pagination = new CPagination($count);

$dataProvider = new CSqlDataProvider($sql, array(
    // ... other config
    'pagination' => $pagination
));

これがどのように機能するか:

ページネーションitemCountは、データプロバイダーの作成中に設定され、再び関数で設定されます。CSqlDataProviderfetchData

    $pagination->setItemCount($this->getTotalItemCount());

paginationデータプロバイダーの作成中は、プロパティに渡された値のみが使用されます。値を渡さない場合itemCountは、デフォルトのof0が使用されます。
したがって、への呼び出しのoffsetにアクセスするpageCount場合はcurrentPage、明示的に設定する必要があります。itemCount fetchDataitemCount

ただし、への呼び出し後にこれらの値が必要な場合は、内fetchDataへの呼び出しにより、値はすでに正しく入力されています。setItemCountfetchData

明確にするための例(itemCountデータプロバイダーの作成中に渡すことなく):

$dataProvider = NodesTerms::getNodesDataFromTerms($nodeId);     
$pagination = $dataProvider->getPagination();
var_dump($pagination->getPageCount()); // this will be zero

$data=$dataProvider->getData(); // getData calls fetchData()

var_dump($pagination->getPageCount()); // now this will be correct value 
于 2012-11-07T17:56:36.643 に答える
0

getCurrentPage は「現在のページのゼロから始まるインデックス」を返します

http://www.yiiframework.com/doc/api/1.1/CPagination#getCurrentPage-detail

最初のページにいる場合は、0 を返す必要があります。

また、ページ サイズと総レ​​コード数がわかっているので、ページ タイトルを生成するのに十分です。

于 2012-11-07T15:08:13.483 に答える