数据小部件
= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
['attribute'=>'id','contentOptions'=>['width'=>'5%']],
'username',
'nickname',
'realname',
'email:email',
['attribute'=>'created_at','format'=>['date','php:Y-m-d H:i']],
[
'class' => 'yii\grid\ActionColumn',
'template'=>'{view} {update} {delete} {approve}',
],
],
]); ?>
1. 小部件 2. 列类 3. 数据列的自定义数据提供程序。 什么是数据提供者
common/models/PostSearch.php
public function search($params)
{
$query = Post::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
//分页
'pagination' => [
'pageSize'=> 2
],
//排序
'sort'=>[
'defaultOrder'=>['id'=>SORT_DESC]
]
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'status' => $this->status,
'type' => $this->type,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'created_by' => $this->created_by,
'updated_by' => $this->updated_by,
]);
$query->andFilterWhere(['like', 'subject', $this->subject])
->andFilterWhere(['like', 'content', $this->content])
->andFilterWhere(['like', 'tag', $this->tag]);
return $dataProvider;
}
2. 数据提供者类型
继承自,实现e接口。 该接口有以下方法:
数据提供者定制
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
//分页
'pagination' => [
'pageSize'=> 2
],
//排序
'sort'=>[
'defaultOrder'=>['id'=>SORT_DESC],
'attributes'=>['id','title']
]
]);
字符串截取
方式1
= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
['attribute'=>'id', 'contentOptions'=>['width'=>'5%']],
'post_id',
'status',
['attribute'=>'content','value'=>function($model){
$str = strip_tags($model->content);
$len = mb_strlen($str);
return mb_substr($str,0,20,'utf-8').($len>20?'...':'');
}],
'url:url',
// 'email:email',
// 'remind',
// 'created_at',
// 'created_by',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
方法二:使用get方法
推荐在模型中添加 get 属性方法。
public function getBegin()
{
$str = strip_tags($this->content);
$len = mb_strlen($str);
return mb_substr($str,0,20,'utf-8').($len>20?'...':'');
}
直接在视图中
= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
['attribute'=>'id', 'contentOptions'=>['width'=>'5%']],
'post_id',
'status',
['attribute'=>'content','value'=>'begin'],
'url:url',
// 'email:email',
// 'remind',
// 'created_at',
// 'created_by',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
和
1. 属性定义的格式
方法名称以 get 开头,后跟属性名称。
方法名称以 set 开头,后跟属性名称。
2. 属性的使用
方法定义后,就可以像普通属性一样使用,但本质的区别在于,当读取属性时,会调用对应的方法,而当属性赋值时,也会调用对应的方法。
3、注意问题
要使用和定义属性,类必须继承自 yii\base\ 或其子类。 该方法不仅适用于模型类,只要是继承自 yii\base\ 类的都可以使用。
如果只定义但未定义的属性是只读属性,则对其赋值不会抛出异常。
该方法定义的属性大部分是只读的,一般不需要持久化,大部分是业务逻辑所需的计算结果。
操作栏定制
操作列的配置属性
[
'class' => 'yii\grid\ActionColumn',
'template'=>"{view} {update} {delete} {approve}",
'buttons'=>[
'approve'=>function($url,$model,$key){
$options = [
'title'=>Yii::t('common','Approve'),
'aria-label'=>Yii::t('common','Approve'),
'data-/confirm/i'=>Yii::t('common','Are you sure?'),
'data-method'=>'post',
'data-pjax'=>'0'
];
return Html::a('',$url,$options);
}
]
],