不加载kartik 的select2 作为GridView 中的过滤器。 Yii2
Posted
技术标签:
【中文标题】不加载kartik 的select2 作为GridView 中的过滤器。 Yii2【英文标题】:Not load kartik's select2 as filter in GridView. Yii2 【发布时间】:2018-09-01 10:15:12 【问题描述】:我尝试使用 Select2 Kartik 过滤列,但没有出现任何内容。 select2 没有完全加载。将显示标签显示为无。
/views/user/index.php
'columns' => [
[
'class' => 'yii\grid\SerialColumn',
],
'name',
/*
This code not works :(
*/
[
'attribute' => 'identification_type',
'value'=> function($model)
return Yii::t('app', TYPE_ID[$model->identification_type]);
,
'filter' => Select2::widget([
'model' => $searchModel,
'attribute' => 'identification_type',
'data' => Arrai::t('person',TYPE_ID),
'theme' => Select2::THEME_BOOTSTRAP,
'hideSearch' => true,
'options' => [
'placeholder' => Yii::t('person', 'Identification type'),
]),
],
/*
This code works!
*/
[
'attribute' => 'identification_type',
'filter' => Arrai::t('app', TYPE_ID),
'value'=> function($model)
return Yii::t('app', TYPE_ID[$model->identification_type]);
,
'filterInputOptions' => [
'class' => 'selectpicker',
'data-style'=>"btn btn-primary btn-round",
'title'=> "Sin seleccion",
],
],
// other columns
]
以下是结果html:
Result HTML
<div class="form-group is-empty">
<select id="personsearch-identification_type" class="form-control" name="PersonSearch[identification_type]"
data-s2-options="s2options_6cc131ae"
data-krajee-select2="select2_0ed9734f"
style="display:none">
<option value="">Tipo de identificación</option>
<option value="CC">Citizenship card</option>
<option value="CE">Foreigner ID</option>
<option value="PAS">Passport</option>
<option value="NIT">NIT</option>
</select>
<span class="material-input"></span></div>
在此结果中,需要 <span>
标记来显示 Select2。但它没有出现。
【问题讨论】:
Arrai::t('person',TYPE_ID)
输出什么?是数组还是文本
【参考方案1】:
为使用 select2 将列配置更改为以下内容,如果我没有记错 Arrai::t('person', TYPE_ID)
,则将文本提供给 data
选项,而它应该是硬编码或来自数据库的数组。
[
'attribute' => 'identification_type',
'value'=> function($model)
return Yii::t('app', TYPE_ID[$model->identification_type]);
,
'filter' => Select2::widget([
'model' => $searchModel,
'attribute' => 'identification_type',
'data' => ['1'=>'option1','2'=>'option2'],
'theme' => Select2::THEME_BOOTSTRAP,
'hideSearch' => true,
'pluginOptions' => [
'allowClear' => true,
'width' => 'resolve',
],
'options' => [
'placeholder' => Yii::t('person', 'Identification type'),
]
),
],
我使用的是硬编码数组,您可以根据需要对其进行更新,如果您的下拉列表值应该来自数据库,那么您可以将数组替换为
yii\helpers\ArrayHelper::map(Model::find()->asArray()->all(),'id','name')
其中Model
应替换为您的特定型号名称,'id' , 'name'
也应替换为有效的列名。
【讨论】:
感谢@muhammad-omer-aslam,但我在创建/更新时使用Arrai::t('person', TYPE_ID)
,它的工作原理。另外,如果我像你在示例中那样编写数据,它也不起作用。
问题是如果Arrai::t('person', TYPE_ID)
返回并且数组作为name=>value
对那么它可以,但是你说它不适用于硬编码数组很奇怪究竟什么不起作用 因为我在最后测试过它并且它有效? @ArturoVerbelDeLeón【参考方案2】:
我发现了问题 发生的情况是我启用了高级搜索。并且高级搜索的select2与GridView过滤器的ID相同。
我只需要修改ID名称就可以了。
[
'attribute' => 'id_setting_person_identification_type',
'value' => function($model)
$type_identication = SettingPerson::getMapGroup('Tipo de identificación');
return Yii::t('app', $type_identication[$model->id_setting_person_identification_type]);
,
'filterType' => GridView::FILTER_SELECT2,
'filter' => $type_identication,
'filterWidgetOptions' => [
'pluginOptions' => ['allowClear' => true],
],
'filterInputOptions' => [
'placeholder' => '-',
'id' => 'id_setting_person_identification_type_gridview',
]
],
【讨论】:
这是答案@muhammad-omer-aslam 很好,你解决了,这就是为什么你应该总是添加完整代码而不是选定的部分以上是关于不加载kartik 的select2 作为GridView 中的过滤器。 Yii2的主要内容,如果未能解决你的问题,请参考以下文章
在 Kartik Select2 小部件中向下滚动时加载越来越多的数据
Yii2:Gridview过滤器中的kartik\Select2下拉列表