1

我对我在 gridview 中用于过滤某些结果的 Kartik DateRangePicker Widget 有疑问。

在我的 SearchModel 中,我创建了两个属性

    public $date_start;
    public $date_end;

我使用这些来过滤数据库“insert_date”中的字段。

在我看来,作为网格配置,我设置了这些选项

[
            'attribute' => 'insert_date',
            'options' => ['class' => 'gridview-date-column'],
            'filter' => DateRangePicker::widget([
                'model' => $searchModel,
                'name' => 'insert_date',
                'attribute' => 'insert_date',
                'startAttribute' => 'date_start',
                'endAttribute' => 'date_end',
                'convertFormat'=>true,
                'pluginOptions' => [
                    'opens'=>'right',
                    'locale' => [
                        'cancelLabel' => 'Clear',
                        'format' => 'd-m-Y',
                    ],
                ]
            ]),
            'format' => ['date', Yii::$app->formatter->datetimeFormat],
            'contentOptions'=>['style'=>'min-width: 200px;'] 
        ],

默认情况下 $date_start 和 $date_end 没有值,所以,当我进入我的视图并尝试过滤此字段时,我在日历上收到一个“invalidDate”错误和一系列NaN

如果我为这两个字段设置了一个值,或者如果将它们从配置中删除(因此我只能将 insert_date 属性用作具有这两个范围的字符串进行过滤),则这是固定的。

查看插件存储库,我发现了相同的案例,并作为作者的回应

出现此问题是因为您的数据日期格式无效,与插件格式不匹配。

但由于这些字段为空,因此永远不会有正确的数据格式。

有人有同样的问题吗?提前感谢所有回复。

4

1 回答 1

0

我有解决方案:

在 Kartik 插件中有一个行为模型,我可以将其包含在我的 searchModel 中:

use kartik\daterange\DateRangeBehavior;

然后我可以实例化它覆盖行为()方法:

public $date_start;
public $date_end;

public function behaviors() {
    return [
        [
            'class' => DateRangeBehavior::className(),
            'attribute' => 'insert_date',
            'dateStartAttribute' => 'date_start',
            'dateEndAttribute' => 'date_end',
            'dateStartFormat' => 'd-m-Y',
            'dateEndFormat' => 'd-m-Y',

        ]
    ];
}

在 search() 方法中:

public function search($params)
{
   // Some other filters
   if($this->date_start && $this->date_end) {
      // filtered query
   }
}

希望这可以帮助别人。

于 2017-07-03T09:37:52.347 回答