不加载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>

在此结果中,需要 &lt;span&gt; 标记来显示 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=&gt;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 小部件中向下滚动时加载越来越多的数据

select2 kartik 数值改为索引值

Kartik/Krajee Select2 未禁用

Yii2:Gridview过滤器中的kartik\Select2下拉列表

yii2 kartik select2 小部件不显示列表的第一个元素

YII2:kartik Select2