yii gridview实现时间段筛选功能

下面是“yii gridview实现时间段筛选功能”的完整攻略。

一、准备工作

首先,我们需要在后台控制器中定义一个名为search()的方法来进行筛选。在该方法中,我们需要通过传递的参数获取目标时间段的开始时间和结束时间,以便进行筛选。

public function actionIndex()
{
    $searchModel = new ModelSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

public function actionSearch($start_time, $end_time)
{
    $searchModel = new ModelSearch();
    $dataProvider = $searchModel->search([
        'ModelSearch' => [
            'start_time' => $start_time,
            'end_time' => $end_time,
        ]
    ]);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

然后,在模型Model中定义一个名为search()的方法,用于查询符合条件的数据。在该方法中,我们需要添加时间段的筛选条件。

public static function search($params)
{
    $query = Model::find();
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $query->andFilterWhere(['between', 'create_time', $this->start_time, $this->end_time]);

    return $dataProvider;
}

二、实现时间段筛选功能

在视图文件index.php中,使用jquery插件daterangepicker来实现选择时间段的功能。

<?php
use drsdre\daterangepicker\DateRangePicker;
echo DateRangePicker::widget([
    'model'=>$searchModel,
    'attribute'=>'create_time',
    'convertFormat'=>true,
    'language'=>'zh-CN',
    'startAttribute'=>'start_time',
    'endAttribute'=>'end_time',
    'pluginOptions'=>[
        'locale' => ['format' => 'Y-m-d'],
        'opens'=>'left',
    ]
]);
?>

然后,在搜索按钮上添加一个JavaScript函数,用于提交时间段筛选的请求。

<?php echo Html::submitButton('搜索', ['class' => 'btn btn-primary', 'onclick' => 'search()']) ?>

最后,在JavaScript代码中定义search()方法,来发送请求并重新加载GridView。

function search() {
    var start_time = $('#modelsearch-start_time').val();
    var end_time = $('#modelsearch-end_time').val();

    $.pjax.reload({
        url: '?r=controller/search&start_time=' + start_time + '&end_time=' + end_time,
        container: '#pjax-container',
        timeout: 10000
    });
}

三、示例说明

示例一

我们需要在Model模型的create_time字段上进行时间段筛选。首先,我们需要在模型的rules()方法中添加该字段的验证规则。

public function rules()
{
    return [
        [['create_time'], 'safe'],
    ];
}

然后,在GridView的columns属性中添加该字段的显示。

[
    'attribute' => 'create_time',
    'format' => ['date', 'php:Y-m-d H:i:s'],
    'filter' => false,
    'headerOptions' => ['width' => '160'],
],

最后,在GridView的dataProvider属性中添加模型的search()方法,同时设定pagination属性为真。

echo GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'id',
        'title',
        [
            'attribute' => 'create_time',
            'format' => ['date', 'php:Y-m-d H:i:s'],
            'filter' => false,
            'headerOptions' => ['width' => '160'],
        ],
        ['class' => 'yii\grid\ActionColumn'],
    ],
    'layout' => "{items}\n{pager}",
    'pager' => [
        'firstPageLabel' => '首页',
        'lastPageLabel' => '尾页',
        'prevPageLabel' => '上一页',
        'nextPageLabel' => '下一页',
        'maxButtonCount' => 5,
    ],
]);

示例二

现在我们需要在关联模型的create_time字段上进行时间段筛选。首先,我们需要在关联模型的rules()方法中添加该字段的验证规则。

public function rules()
{
    return [
        [['create_time'], 'safe'],
    ];
}

然后,在主模型Modelsearch()方法中添加关联模型Relate的查询以及关联表的join条件。

public static function search($params)
{
    $query = Model::find()->joinWith('relate');
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $dataProvider->setSort([
        'attributes' => [
            'create_time' => [
                'asc' => ['model.create_time' => SORT_ASC],
                'desc' => ['model.create_time' => SORT_DESC],
            ]
        ]
    ]);

    $dataProvider->setPagination(['pageSize' => 10]);

    $relateQuery = Relate::find();
    $relateDataProvider = new ActiveDataProvider([
        'query' => $relateQuery,
    ]);

    $query->andFilterWhere(['between', 'model.create_time', $this->start_time, $this->end_time]);
    $relateQuery->andFilterWhere(['between', 'relate.create_time', $this->start_time, $this->end_time]);

    return $dataProvider;
}

然后,在主模型Modelfields()方法中添加关联模型Relate的查询。

public function fields()
{
    return [
        'id',
        'title',
        'create_time',
        'relate_create_time' => function () {
            return $this->relate->create_time;
        }
    ];
}

最后,在GridView的columns属性中添加关联模型Relate的显示。

[
    'attribute' => 'relate_create_time',
    'format' => ['date', 'php:Y-m-d H:i:s'],
    'filter' => false,
    'headerOptions' => ['width' => '160'],
    'value' => function($model) {
        return $model->relate_create_time;
    }
],

以上就是Yii GridView实现时间段筛选功能的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:yii gridview实现时间段筛选功能 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • AJAX实现瀑布流布局

    下面我将提供关于“AJAX实现瀑布流布局”的完整攻略,包含以下几个步骤: 步骤1:了解瀑布流布局 瀑布流布局是一种流式布局方式,在页面中按照列来展示数据。该布局的特点是: 每一列宽度相同,高度不同; 每一列数据按照从上到下,从左到右的顺序依次排列; 数据加载时通过 AJAX 异步请求,实现数据的无限滚动加载。 步骤2:布局HTML和CSS 在HTML中,我们…

    css 2023年6月11日
    00
  • 将文本输入框内容加入表中的js代码

    让我来为你详细讲解如何将文本输入框中的内容加入表中的 JS 代码步骤: 步骤一:HTML 表单 首先,需要在 HTML 页面中添加表单来获取用户输入的数据,例如: <form> <label for="username">用户名:</label> <input type="text&qu…

    css 2023年6月10日
    00
  • JS中定位 position 的使用实例代码

    JS中定位(position)的使用实例代码是Web开发中经常用到的。它可以通过CSS属性进行定义,如position: static; position: relative; position: absolute; 和 position: fixed;。本篇攻略将详细讲解JS中定位(position)的使用,并提供两个使用实例代码说明。 一、定位posit…

    css 2023年6月10日
    00
  • CSS实现照片堆叠效果的实例代码

    下面是CSS实现照片堆叠效果的完整攻略: 1. 确定HTML结构 首先,我们需要在HTML中定义多张图片的结构。可以使用HTML的<img>标签或者<div>标签加上背景图的方式来实现。比如说,下面的代码是定义两张图片的结构: <div class="photo-stack"> <div clas…

    css 2023年6月10日
    00
  • CSS旋转与翻转使用示例详解

    CSS旋转与翻转使用示例详解 前言 在网站美化中,CSS旋转与翻转是非常实用的技能之一。本文将介绍如何使用CSS旋转和翻转来为你的网站添加一些视觉上的变化。 CSS旋转 CSS旋转可以帮助你在不使用图像的情况下,改变元素的方向和角度。 使用transform属性 使用transform属性,可以控制元素的旋转方向和角度。该属性可控制多种变形效果,包括旋转、缩…

    css 2023年6月11日
    00
  • 带大家了解一下JavaScript常见的五个内存错误

    带大家了解一下JavaScript常见的五个内存错误 在JavaScript中,内存错误是常见的开发问题之一。当我们开发大型应用程序时,内存错误可能会对应用程序的性能和稳定性造成负面影响。本文将介绍JavaScript中常见的五种内存错误,以及如何解决它们。 1. 内存泄漏 内存泄漏是指未释放不再使用的内存。它可能是由于变量的值一直存在,而没有被垃圾回收机制…

    css 2023年6月10日
    00
  • 简化的CSS Reset:15套CSS重设实例

    介绍: 在网页开发过程中,不同浏览器对于网页样式默认值存在差异,可能导致网页在不同浏览器或设备上呈现出不一样的效果。因此,为了解决这一问题,开发者们推出了CSS Reset重设样式表的方法。接下来介绍的是15个常用的CSS Reset重设实例。 一、Eric Meyer的重设样式表 Eric Meyer开发了一份大名鼎鼎的样式表-Reset CSS。该样式重…

    css 2023年6月10日
    00
  • 详解canvas绘制网络字体几种方法

    让我详细讲解一下“详解canvas绘制网络字体几种方法”的攻略。 详解canvas绘制网络字体几种方法 什么是网络字体? 在网页中,有时我们需要使用一些特定的字体以符合设计需求。而这些字体是否能够在用户设备中正确显示就成了一个问题。如果用户没有该字体,则无法正确显示网页中的文字。因此,网络字体应运而生,它可以让设计者在网页中使用非系统自带字体,并且无须下载安…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部