データプロバイダーの新しいフィールド
データプロバイダーのDataProviterは、グリッドビューにデータを提供します。データプロバイダーがActiveDataProviderの場合、データソースはモデルです。モデルクエリで追加のフィールドが指定されている場合、グリッドビューで追加のフィールドを呼び出すと、undefinedが表示されます。解決策は次のとおりです
データプロバイダー
$query = User::find()->select("*,count(id) as num")->groupBy(['uid']);//num为新增的额外字段
$dataProvider = new ActiveDataProvider(['query'=>$query]);
モデルUser.phpを開き、ファイルにコードを追加します。public $num;
OK、それなら他の属性のようにグリッドビューで直接numを呼び出すことができます
データフィルターの新しいフィールド
新しいフィールドを使用するデータプロバイダーに加えて、フィルターは新しいフィールドを使用する場合もあります。
たとえば、データをフィルタリングする場合、期間パラメータをフィルタに渡しますが、次のように、データテーブルにそのようなフィールドはありません。
最初にgridwiewに新しいact_timeフィールドを追加し、それを使用してフィルタリングしました
[
'attribute' => 'act_time',
'label' => '选择请求时段',
'class' => DateColumn::className(),
'value' => function($data){
//return $end_time;
//return '';
}
]
次に、対応するスクリーニングモデルに移動し、次のように定義した新しいフィールドを登録します。
//親モデルの属性を継承し、新しい属性を追加します
public function attributes()
{
return array_merge(parent::attributes(),['act_time']);
}
//设置新字段的验证规则
public function rules()
{
return [
[['id', 'uid', 'created_at'], 'integer'],
[['path', 'method', 'statuscode', 'ip','phone','act_time'], 'safe'],
];
}
したがって、searchModelで新しいフィルターフィールドを使用できます
giiによって生成されたバックエンドファイルを編集します
giiによって生成されたバックエンドファイルと私たちは私たちのニーズを満たしています。他のjs、cssを紹介したり、ページに直接jsコードを追加したりする必要がある場合はどうすればよいですか?
使用する$this->registerJsFile();
リソースを持ち込む
$this->registerJsFile('static/js/echarts.min.js');
$this->registerJsFile('static/js/china.js');
jsコードを追加します(ファイルの最後に)
<?php
$this->registerJs("
alert('Hello world');
", \yii\web\View::POS_END);
グリッドビューのコンテンツとボタンのパラメーター
[
//列名称
'label' => '状态',
//该列对应的数据提供器中的字段。可以不填。填写的话,当value不设值时,会自动读取字段值
'attribute' => 'last_a_time',
//列内容的渲染状态,raw表示自定义html,还有image,text可选
'format' => 'raw',
//设置表格头部样式
'headerOptions' => ['width' => '100px','style'=>'text-align:center;'],
//设置表格内容列样式
'contentOptions' => ['style'=>'text-align:center;'],
//自定义返回值
'value' => function($model){
return $model->status==0?'<span style="color:orange;">待回复</span>':'<span style="color:green;">已回复</span>';
},
//当visible值为真时,显示整列,为假,不显示整列
‘visible’ => (1==2),
//当该字段在searchmodel中设为筛选字段时,可以设置该字段的筛选样式
//传false,不显示筛选。传数组,展示下拉框筛选
'filter' => [0=>'待回复',1=>'已回复'],
//设置筛选框的元素属性
'filterInputOptions' => [
'id' => 'myselect', //设置筛选框的id
'placeholder'=>'input的默认值',//筛选框是文本框时,设置占位字符
'prompt' => '全部'.//筛选框下拉框时,设置下拉框默认值
],
],
[
'class' => 'yii\grid\ActionColumn',
'header' => '状态', //列名称
'template' => '{status}', //定义按钮
'headerOptions' => ['width' => '150px','style'=>'text-align:center;'],
'contentOptions' => ['style'=>'text-align:center;'],
'buttons' => [
//试下按钮方法
'status' => function($url, $model, $key){
$status = $model->status==1?'<span style="color:green;">正常</span>':'<span style="color:red;">禁用</a>';
$url = Url::to(['statusedit','id'=>$key]);
return '<a href="javascript:;" onclick="status_edit(\''.$url.'\',this)">'.$status.'</a>';
}
]
],
Yii2GridViewでカスタム関数を使用してコンテンツを表示するときに外部変数を使用する際の問題
ActiveForm
ファイルをアップロードする必要がある場合は、enctype属性を設定する必要があります。2番目のパラメーターは、フォームを検証するかどうかを示します。アップロードされたファイルに特別な処理が必要な場合は、このフィールドをfalseに設定することをお勧めします
ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data', 'class' => 'submit-form']],false);