У меня есть приложение Yii2, и в одном из моих представлений индекса (модифицированная версия стандартного crud, созданного с помощью инструмента gii
cli) я заменил виджет GridView
на Kartik, а также установил для столбца значениеиспользуйте filterType
из GridView::FILTER_SELECT2
Моя проблема заключается в том, что при передаче массива в столбец без filterType
появляется меню выбора с пустым параметром для «очистки» фильтра поиска:
[
'attribute' => 'scale_id',
'label' => 'Scale',
'value' => function($model) {
return empty($model->scale) ? null : $model->scale->name;
},
'filter' => ArrayHelper::map(Scale::find()->asArray()->all(), 'id', 'name'),
],
Однако, изменив фильтр на select2 Kartik, пустая опция не появится, и то же самое поведение не будет применяться:
[
'attribute' => 'scale_id',
'label' => 'Scale',
'value' => function($model) {
return empty($model->scale) ? null : $model->scale->name;
},
'filter' => ArrayHelper::map(Scale::find()->asArray()->all(), 'id', 'name'),
'filterType' => GridView::FILTER_SELECT2,
],
Как бы я достиг того же "пусто, если не изменено? выберите фильтры с помощью фильтра select2 от Kartik?
Обновление: Комбинация prompt
с allowClear
воссоздает аналогичную функциональность, но она все еще не идеальна.Первоначальный экран выглядит следующим образом:
Однако после выбора параметров закрытие x
не подходит по размеру и накладывается на текст, а также не обеспечивает первоначальное поведениепустое / пустое значение в раскрывающемся списке: 
Вот мой код для GridView
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
'id',
'description',
'sku_number',
[
'attribute' => 'owner_id',
'label' => 'Owner',
'value' => function($model) {
return $model->owner->name;
},
'filter' => ArrayHelper::map(Owner::find()->asArray()->all(), 'id', 'name'),
'filterType' => GridView::FILTER_SELECT2,
'filterWidgetOptions' => [
'options' => ['prompt' => ''],
'pluginOptions' => ['allowClear' => true],
],
],
[
'attribute' => 'product_id',
'label' => 'Product',
'value' => function($model) {
return $model->product->name;
},
'filter' => ArrayHelper::map(Product::find()->asArray()->all(), 'id', 'name'),
'filterType' => GridView::FILTER_SELECT2,
'filterWidgetOptions' => [
'options' => ['prompt' => ''],
'pluginOptions' => ['allowClear' => true],
],
],
[
'attribute' => 'manufacturer_id',
'label' => 'Manufacturer',
'value' => function($model) {
return $model->manufacturer->name;
},
'filter' => ArrayHelper::map(Manufacturer::find()->asArray()->all(), 'id', 'name'),
'filterType' => GridView::FILTER_SELECT2,
'filterWidgetOptions' => [
'options' => ['prompt' => ''],
'pluginOptions' => ['allowClear' => true],
],
],
[
'attribute' => 'scale_id',
'label' => 'Scale',
'value' => function($model) {
return empty($model->scale) ? null : $model->scale->name;
},
'filter' => ArrayHelper::map(Scale::find()->asArray()->all(), 'id', 'name'),
'filterType' => GridView::FILTER_SELECT2,
'filterWidgetOptions' => [
'options' => ['prompt' => ''],
'pluginOptions' => ['allowClear' => true],
],
],
['class' => 'yii\grid\ActionColumn'],
],
]); ?>