我在视图中有一个典型的 ListView 小部件,如下所示:
public function actionView($id)
{
$model = $this->findModel($id);
$dataProvider = new \yii\data\ActiveDataProvider(['query' => \app\models\Verses::find()->where(['sura_id' =>$id])->with('sura')]);
return $this->render('view', [
'model' => $model,
'dataProvider' => $dataProvider,
]);
}
在视图中呈现
Verses
模型的列表,并且ListView的分页器也可用。
我想在页面标题中添加一些详细信息。这些详细信息是来自列表中呈现的
Verses
模型的第一个和最后一个记录的数据。
我尝试使用
min()
和 max()
PHP 函数来获取视图中的第一条和最后一条记录,如下所示:
$min = min($model->verses);
echo $min->verse_id;
但是,它返回最终的第一条记录,而不是当前寻呼机页面。换句话说,它不会返回列表第一项的
verse_id
值。
有没有办法获取ListView的第一个、最后一个甚至特定的第n个项目?
您可以访问 dataProvider 的模型数组,获取第一个和最后一个
public function actionView($id)
{
$model = $this->findModel($id);
$dataProvider = new \yii\data\ActiveDataProvider(['query' => \app\models\Verses::find()->where(['sura_id' =>$id])->with('sura')]);
$first = $dataProvider['models'][0];
$last = $dataProvider['models'][$dataProvide['totalCount']-1];
或者你可以使用
$myModels = $dataProvider->getModels();
$first = myModels[0];
$last = myModels[$dataProvide['totalCount']-1];
对于页面,您可以使用计数而不是总计数
return $this->render('view', [
'model' => $model,
'dataProvider' => $dataProvider,
]);
}