不在网格视图中加载kartik的select2作为过滤器。 Yii2

时间:2018-03-22 20:17:34

标签: php gridview yii2 jquery-select2

我尝试使用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。但它没有出现。

2 个答案:

答案 0 :(得分:0)

使用select2将列配置更改为以下内容,如果我没有错误data,则将文本提供给Arrai::t('person', TYPE_ID)选项,而它应该是硬编码的数组或来自数​​据库的数组。

[
   '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'也应替换为有效的列名。

答案 1 :(得分:0)

我发现问题发生的事情是我启用了高级搜索。并且高级搜索的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',
    ]
],