ListView是yii框架中相似GridView,也是用於展現多條數據的小部件,相比GridView,ListView能夠更加靈活地設置數據展現的格式。php
下面以我本身作的一個使用ListView來展現數據的例子,來簡單講解一下ListView小部件的使用。html
首先須要在控制器中new一個數據提供器,傳給視圖,示例代碼以下:yii2
public function actionIndex() {
$dataProvider = new ActiveDataProvider([
'query' => Diary::find()->orderBy('day'),
'pagination' => [//分頁
'pagesize' => 4
]
]);
return $this->render('index', [
'dataProvider' => $dataProvider
]);
}
接下來就是在視圖文件中使用ListView來展現數據了,示例代碼以下:框架
<?= ListView::widget([
'dataProvider' => $dataProvider,//數據提供器
'itemView' => '_diary',//指定item視圖(該視圖文件與當前視圖在同一個目錄下)
'viewParams' => [//傳參數給每個item
'moodCfg' => Mood::getAll()
],
'layout' => '{items}<div class="col-lg-12 sum-pager">{summary}{pager}</div>',//整個ListView佈局
'itemOptions' => [//針對渲染的單個item
'tag' => 'div',
'class' => 'col-lg-3'
],
/*
'options' => [//針對整個ListView
'tag' => 'div',
'class' => 'col-lg-3'
],
*/
'pager' => [
//'options' => ['class' => 'hidden'],//關閉分頁(默認開啓)
/* 分頁按鈕設置 */
'maxButtonCount' => 5,//最多顯示幾個分頁按鈕
'firstPageLabel' => '首頁',
'prevPageLabel' => '上一頁',
'nextPageLabel' => '下一頁',
'lastPageLabel' => '尾頁'
]
]);?>
這裏說明一下,因爲ListView和GridView繼承於同一個父類BaseListView,因此有不少設置參數是同樣的,能夠經過參考yii
GridView的參數設置來設置ListView,關於GridView小部件的使用能夠參考個人另外一篇博文——yii2之GridView小部件。
ide
最後就是在ListView的'itemView'參數指定的視圖文件中來編寫每一條數據的展現格式了,示例代碼以下:佈局
<div class="item">
<h4 style="font-weight:bold"><?= Html::encode($model->title ? $model->title : '(無題)') ?></h4>
<p style="font-size:13px">
<span style="color:orangered"><?= date('Y.m.d', $model->day) ?></span><br>
<span style="color:#999">心情:<?= $moodCfg[$model->mood] ?></span>//這裏訪問ListView的'viewParams'參數傳過來的參數$moodCfg
</p>
<div style="margin:15px 0">
<?php echo HtmlPurifier::process(mb_substr($model->content, 0, 25).'......'); ?>
</div>
<p class="info">
添加:<?= date('Y-m-d H:i:s', $model->created_at) ?><br>
最後修改:<?= date('Y-m-d H:i:s', $model->updated_at) ?>
</p>
<div style="text-align:right">
<?= Html::a('<span class="glyphicon glyphicon-eye-open"></span>', ['view', 'id' => $model->id], ['title' => '查看']) ?>
<?= Html::a('<span class="glyphicon glyphicon-pencil"></span>', ['upcreate', 'id' => $model->id], ['title' => '修改']) ?>
<?= Html::a('<span class="glyphicon glyphicon-trash"></span>', ['delete', 'id' => $model->id], [
'title' => '刪除',
'data' => [
'confirm' => '您肯定真的要刪除 '.date('Y年m月d日', $model->day).' 的日記嗎?',
'method' => 'post',
]
]) ?>
</div>
</div>
最後的最後,效果圖展現時間(略醜,勿怪):post