我有一个Yii2应用程序,并且在我的一个索引视图(使用gii
cli工具生成的默认crud的修改版本)中,我已经用Kartik替换了GridView
小部件,同样设置一列以使用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'),
],
但是,通过将过滤器更改为Kartik的select2,则不会出现空选项,并且不会出现相同的行为:
[
'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,
],
我如何使用Kartik的select2过滤器实现相同的“除非更改,否则为空白”选择过滤器?
更新:
将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'],
],
]); ?>
答案 0 :(得分:1)
将数据列更改为
suspend fun
请我们[
'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' => '']
]
],
DataColumn
答案 1 :(得分:1)
您需要将"allowClear"=>true
的{{1}}下的pluginOptions
选项与Select2
一起使用。
要调整列的大小,请尝试为"prompt"=>''
使用filterInputOptions
,并使用id
调整其宽度,因为它们占用的空间超过了所需的空间,并且挤压了select2。
manufacturer_id
更新
确保[
'attribute' => 'id',
'filterInputOptions' => ['class' => 'form-control', 'style' => 'width:50px'],
],
[
'attribute' => 'manufacturer_id',
'filterInputOptions' => ['class' => 'form-control', 'style' => 'width:50px'],
],
[
'attribute' => 'scale_id',
'filter' => ArrayHelper::map(Scale::find()->asArray()->all(), 'id', 'name'),
'filterType' => GridView::FILTER_SELECT2,
'filterWidgetOptions' => [
'options' => ['prompt' => ''],
'pluginOptions' => [
'allowClear' => true,
'width'=>'resolve'
],
],
],
的默认宽度更好。将GridView::FILTER_SELECT2
设置为默认值即可解决。我已经为pluginOptions['width']
参见here
更新2
显然,它不能与scale_id
一起使用,因为它会使select2宽度变得疯狂,并且您可能需要像resolve
那样手动设置它