来自数据提供程序的Yii分页变量

来自数据提供程序的Yii分页变量,yii,Yii,我需要在控制器操作中使用某些分页变量 例如: 1.当前页码 2.当前页偏移量 3.显示的记录总数 即显示的2005年记录中的31至40项 我尝试了以下方法: $dataProvider = NodesTerms::getNodesDataFromTerms($nodeId) ; $pagination = $dataProvider->getPagination(); var_dump($pagination->getPageCount()); //var_du

我需要在控制器操作中使用某些分页变量

例如:

1.当前页码

2.当前页偏移量

3.显示的记录总数

即显示的2005年记录中的31至40项

我尝试了以下方法:

$dataProvider = NodesTerms::getNodesDataFromTerms($nodeId) ;     
  $pagination = $dataProvider->getPagination();
  var_dump($pagination->getPageCount());
  //var_dump($pagination->currentPage);
我可以获得分页对象,但在
$Pagination->currentPage
$Pagination->offset
等中为零(0)

我需要这些信息来动态生成包含页面列表的动作的元页面
title
description
,例如pagetitle:Page3/10,用于美国食谱

感谢您的帮助。

getCurrentPage返回“当前页面的从零开始的索引”

所以如果你在第一页,它应该返回0

以及您知道的页面大小和足以生成页面标题的记录总数。

请尝试在
数据提供程序中显式设置:

“分页”=>数组(
“页面大小”=>10,
'itemCount'=>$count
)
或者使用新的
CPagination
对象:

$pagination=新注册($count);
$dataProvider=新的CSqlDataProvider($sql,数组(
//…其他配置
“分页”=>$pagination
));

工作原理:

分页的
itemCount
是在创建数据提供程序的过程中设置的,再次执行以下功能:

$pagination->setItemCount($this->getTotalItemCount());
在创建数据提供程序期间,仅使用传递给
分页
属性的值,如果不传递
itemCount
值,则使用默认值
0

因此,如果我们想在调用
fetchData
之前访问
offset
pageCount
currentPage
itemCount
,我们必须显式设置
itemCount

但是,如果我们在调用
fetchData
之后需要这些值,那么由于在
fetchData
中调用
setItemCount
,这些值已经正确填充

为清晰起见,示例(在创建数据提供程序期间不传递
itemCount
):

$dataProvider=NodesTerms::getNodesDataFromTerms($nodeId);
$pagination=$dataProvider->getPagination();
变量转储($pagination->getPageCount());//这将是零
$data=$dataProvider->getData();//getData调用fetchData()
变量转储($pagination->getPageCount());//现在这将是正确的值

您是否在
getNodesDataFromTerms
函数中使用了
CPagination
对象?如果是,它的配置是什么?如果没有,那么首先您需要使用SQL数据提供程序。下面是NodesTerms::getNodesDataFromTerms($nodeId)返回的内容。$dataProvider=new-CSqlDataProvider($sql,array('keyField'=>'node_id','totalItemCount'=>$count,'pagination'=>array('pageSize'=>10));返回$dataProvider;由于我正在DataProvider中传递“pagination”键,我假设它将创建pagination对象。请显示创建CactiveDataProvider的代码抱歉,我现在不在电脑上,将在几个小时后发布代码。谢谢。它返回0,即使我在第2、3、4页等。事实上,我正在用yii重写一个网站,我需要与我移植的旧网站完全相同的元标题n描述。美国食谱需要第x页,共y页。对于元描述,从x到y显示z个总配方。这意味着我需要页码以及当前页面的记录偏移量。只想感谢您抽出时间给出答案。谢谢你,完美的朋友。。。正如你所说,只是传递“itemCount”。我现在可以轻松地获得$pagination->currentPage和$pagination->getOffset()。。。谢谢。非常感谢。很高兴能提供帮助,我将在以后的某个时间添加更多的解释,这将有助于更好地理解此解决方案。如果可能的话,我将等待一些解释。如果我已经在CSQLDataProvider中传递了totalItemCount,那么为什么需要在分页实例中传递itemCount呢。这件事在文档中没有,如果有这样的信息,我可能会忽略。当然,伙计,慢慢来。在我的时区大约是凌晨2点。早上睡觉时会看到你的评论。。。当心,你的解释很有道理。非常感谢您抽出时间。非常感谢。