- 浏览: 106221 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
沉醉音乐的咖啡:
引用
Yii框架中ActiveRecord使用Relations -
stevecj:
呵呵,这个以后再交流。
盛大开始行动了,值得尊敬 -
庄表伟:
谢谢鼓励!我们会更加努力的。能聊聊你想做的另一个新产品是什么吗 ...
盛大开始行动了,值得尊敬
Gridview日期过滤列(filter date column for gridview in Yii framework)
CActiveDataProvider, CArrayDataProvider, CSqlDataProvider做为gridview挂件的数据提供者的使用经验
使用yii进行命令行程序设计
近期评论
alpha-永 在 应用Yii1.1和PHP5进行敏捷Web开发(十) 上的评论
Boy.Lee ^ ^ 在 应用Yii1.1和PHP5进行敏捷Web开发(十二) 上的评论
Boy.Lee ^ ^ 在 Yii中文API翻译项目启动 上的评论
xieguolun 在 应用Yii1.1和PHP5进行敏捷Web开发(十二) 上的评论
CArrayDataProvider in Yii Code Demo » Welcome to YiiBlog 在 CActiveDataProvider, CArrayDataProvider, CSqlDataProvider做为gridview挂件的数据提供者的使用经验 上的评论
文章归档
2011 年四月
2011 年三月
2011 年二月
2011 年一月
2010 年十二月
2010 年十一月
2010 年十月
分类目录
YiiBook动态
YiiBook翻译
Yii使用心得
未分类
功能
登录
文章 RSS
评论 RSS
WordPress.org
← Older posts
Gridview日期过滤列(filter date column for gridview in Yii framework)
Posted on 2011 年 04 月 22 日 by Syang
SYDateColumn下载(Download SYDateColumn
先看图(First look snapshot):
ok,这里我自定义了一个日期列挂件,扩展了CDataColumn,名叫SYDateColumn.php,代码贴了下面
(OK,this is a custom widget of a date column, extends CDataColumn, its name is SYDateColumn.php. Code:)
SYDateColumn.php
01 <php
02 Yii::import('zii.widgets.grid.CDataColumn');
03
04 class SYDateColumn extends CDataColumn
05 {
06
07 /**
08 * if filter is false then no show filter
09 * else if filter is 'range' string then show from input to input
10 * else if filter is 'single' string then show input
11 * @var mixed
12 */
13 public $filter='range';
14
15 public $language = false;
16
17 /**
18 * jquery-ui theme name
19 * @var string
20 */
21 public $theme = 'base';
22
23 public $fromText = 'From: ';
24
25 public $toText = 'To: ';
26
27 public $dateFormat = 'yy-mm-dd';
28
29 public $dateInputStyle="width:70%";
30
31 public $dateLabelStyle="width:30%;display:block;float:left;";
32
33 public $dateOptions = array();
34
35 /**
36 * Renders the filter cell content.
37 */
38 protected function renderFilterCellContent()
39 {
40 if($this->filter!==false && $this->grid->filter!==null && $this->name!==null && strpos($this->name,'.')===false)
41 {
42
43 $cs=Yii::app()->getClientScript();
44 $cs->registerCssFile($cs->getCoreScriptUrl().'/jui/css/'. $this->theme .'/jquery-ui.css');
45 if ($this->language!==false) {
46 $cs->registerScriptFile($cs->getCoreScriptUrl().'/jui/js/jquery-ui-i18n.min.js');
47 }
48 $cs->registerScriptFile($cs->getCoreScriptUrl().'/jui/js/jquery-ui.min.js');
49
50 if ($this->filter=='range') {
51 echo CHtml::tag('div', array(), "<span style="". $this->dateLabelStyle ."">". $this->fromText ."</span>" . CHtml::activeTextField($this->grid->filter, $this->name.'_range[from]', array('style'=>$this->dateInputStyle, 'class'=>'filter-date')));
52 echo CHtml::tag('div', array(), "<span style="". $this->dateLabelStyle ."">". $this->toText ."</span>". CHtml::activeTextField($this->grid->filter, $this->name.'_range[to]', array('style'=>$this->dateInputStyle, 'class'=>'filter-date')));
53 }
54 else {
55 echo CHtml::tag('div', array(), CHtml::activeTextField($this->grid->filter, $this->name.'_range[to]', array('class'=>'filter-date')));
56 }
57 $options=CJavaScript::encode($this->dateOptions);
58
59 if ($this->language!==false) {
60 $js=<<<eod $(filter_date).datepicker(jquery.extend({dateformat:'{$this-="">dateFormat}'}, jQuery.datepicker.regional['{$this->language}'], {$options}));
61 EOD;
62 }
63 else {
64 $js=<<<eod $(filter_date).datepicker(jquery.extend({dateformat:'{$this-="">dateFormat}'}, {$options}));
65 EOD;
66 }
67 $js=<<<eod var="" filter_date="#{$this->grid->id} input[class="filter-date"]" ;="" $('body').delegate(filter_date,="" 'mousedown',="" function(){="" {$js}="" });="" eod;="" $cs-="">registerScript(__CLASS__, $js);
68 }
69 else
70 parent::renderFilterCellContent();
71 }
72
73 }
74 </eod></eod></eod>
好,这个类使用了jui的类库,刚好yii自带了这个类库,所以我们也不用其它的js文件了,方便部署,放到components中就可以,
(OK, the class used JUI library.jui build-in Yii,So we do not have other js files.please move the class to protectd/components.)
下面我们设置一个gridview的日期列,示例代码如下:
(e.g. Usage as follows in view file:)
01 'columns'=>array(
02 ...
03
04 'title',
05 array(
06 'header'=>'creation_time',
07 'name'=>'creation_time',
08 'class'=>'SYDateColumn'
09 ),
10 array(
11 'header'=>'update_time',
12 'name'=>'update_time',
13 'filter'=>'single',
14 'class'=>'SYDateColumn'
15 ),
16 array(
17 'class'=>'CButtonColumn',
18 ),
19 ),
这里,指定了使用日期列的类名,SYDateColumn类名以我的名字作为前缀,呵呵。
(Here, using the class name SYDateCloumn of the column. SY is my name.)
现在要说一下,这个类的一个属性
(Now,Introduce property of this class)
$filter=’range’; //默认,会使用一个范围 (default. value is range or single, false,will not show fliter).
$language = false; //这是jquery-ui的语言,中文请指定为zh_CN (jquery-ui language)
$theme = ‘base’; //jquery-ui主题包,yii只有一个base的,这个默认就行了 (jquery-ui theme)
$fromText = ‘From: ‘; //如果使用一个范围,那这个文字会显示在输入框前面 (if $filter is range,that filter inputbox before text)
$toText = ‘To: ‘; //同上(ibid)
$dateFormat = ‘yy-mm-dd’; //日期格式,是datepicker使用的,(dateformat)
$dateInputStyle=”width:70%”; //如果使用范围,会使用这个样式控制输入框 (if $filter is range, inputbox style)
$dateLabelStyle=”width:30%;display:block;float:left;”; //如果使用范围,会使用这个样式控制标签(if $filter is range, text style)
$dateOptions = array(); //需要传给datepicker的一些附加选项。(datepicker additional Options);
ok,再说一下,这个类会自动生成以属性名加_range['from']和_range['to']为name的输入框,如果只用single的话,只有一个to
,
(ok, the class will create attribute name of model and join _range['from'] and/or _range['to'] input name.)
e.g. ‘name’=>’creation_time’, filter input name is create_time_range['from'] and create_time_range['to'])
‘name’=>’creation_time’,
‘filter’=>’single’, filter input name is create_time_range['to'])
好,下面我们改造model
因为加了与数据库字段不相关的model属性,所以这里我们定义一个属性
如上面的示例列。
(OK, we are change model class, Because additional field is not associated with the database, the model attributes, so we define a property)
1 XXXX extends CActionModel
2 {
3 ...
4 public $creation_time_range = array();
5 public $update_time_range = array();
6 ...
7 }
好,下面要把这两个属性加到rules里,作为safe方法,要不model不会把这两个属性赋值,示例代码如下:
(OK, The following rules should add these two properties, the method as a safe, Otherwise, the new property will not be assigned additional.)
1 function rules() {
2 return array(
3 ...
4 array('....., creation_time_range, update_time_range', 'safe', 'on'=>'search'),
现在,我们修改search方法,修改查询条件, 这里因为我的表使用了日期字段。如果你使用其它字段类型请相应修改。
(We modify the query at search method in Module class , the table used the date type field. If you use other field types, please be amended accordingly.)
01 function search() {
02 ...
03
04 //creation_time_range
05 $from = $to = '';
06 if (count($this->creation_time_range)>=1) {
07 if (isset($this->creation_time_range['from'])) {
08 $from = $this->creation_time_range['from'];
09 }
10 if (isset($this->creation_time_range['to'])) {
11 $to= $this->creation_time_range['to'];
12 }
13 }
14
15 if ($from!='' || $to !='') {
16 if ($from!='' && $to!='') {
17 $from = date("Y-m-d", strtotime($from));
18 $to = date("Y-m-d", strtotime($to));
19 $criteria->compare('creation_time',"> $from",true);
20 $criteria->compare('creation_time',"< $to",true);
21 }
22 else {
23 if ($from!='') $creation_time = $from;
24 if ($to != '') $creation_time = $to;
25 $creation_time = date("Y-m-d", strtotime($creation_time));
26
27 $criteria->compare('creation_time', "$creation_time" ,true);
28 }
29 }
30
31 //update_time
32 $to = '';
33 if (isset($this->update_time_range['to'])) {
34 $to= $this->update_time_range['to'];
35 }
36 if ($to!='') {
37 $update_time = date("Y-m-d", strtotime($to));
38 $criteria->compare('update_time',$update_time,true);
39 }
40 }
ok,通过以上修改,日期过滤列就实现了。)
发表评论
-
Yii CDBHttpSession数据库存储session性能优化实战
2011-09-14 20:11 932Yii CDBHttpSession数据库存储session性 ... -
YII CACHE使用示例
2011-08-29 21:58 3971从Boylee那抄过来的.链接中有boylee的博客地址. 我 ... -
Yii CDBHttpSession数据库存储session性能优化实战
2011-08-29 21:36 4250Yii CDBHttpSession数据库存储session性 ... -
通过扩展CWebUser添加信息到Yii:app()->user
2011-08-29 21:21 3553通过扩展CWebUser添加信息到Yii:app()-> ... -
通过扩展 CWebUser 增加信息到 Yii::app()->user
2011-05-25 11:16 7581通过扩展 CWebUser 增加信息到 Yii::app()- ... -
利用yii framework dropdown 创建级联菜单
2011-05-23 10:57 2413利用yii framework dropdown 创建级联菜单 ... -
如何开发Yii的中文网站
2011-05-23 10:50 5110如何开发Yii的中文网站 首先在配置文件main.php 中 ... -
Yii CGridView 详解(关键看关联表字段排序部分)
2011-05-23 10:47 6967Yii CGridView 详解(关键看关联表字段排序部分) ... -
总结一下隐藏index.php文件的步骤
2011-05-23 10:07 1579总结一下隐藏index.php文件的步骤 1.开启apache ... -
Yii Framework的CPagination用法详解
2011-05-22 17:52 3269Yii Framework的CPagination用法详解 c ... -
YII TIPS
2011-05-22 17:12 1449db组件 'schemaCachingDuration'=&g ... -
yii ajax分页
2011-05-22 16:24 1872我们有时候需要ajax读取数据,并进行分页。首先我们遇到的是如 ... -
yii中widget分页的用法
2011-05-22 16:15 4150yii中widget分页的用法 1首先contr ... -
YII全局函数使用
2011-05-21 08:57 4619由于YII致力于完美的整合第三方库,它并没有定义任何全局函数。 ... -
Yii框架中ActiveRecord使用Relations
2011-05-21 06:55 2027Yii框架中ActiveRecord使用Relations ... -
转:关于yii的relations
2011-05-20 16:53 2603关于yii的relations . ... -
使用GD库生成验证码
2011-05-14 21:19 1184GD库在php 中的另一个重要的应用,是使用GD库生 ... -
smarty插件:在多少分钟前,多少小时前,多少天前。
2011-05-14 21:11 1290smarty插件:在多少分钟前,多少小时前,多少天前。 ... -
yii快速入门与参考
2011-05-04 09:17 5516yii快速入门与参考 ...
相关推荐
本实例主要关注如何实现GridView的固定表头和列,使得用户在滚动浏览长表格时,表头和部分列始终保持可见,提高用户体验。 GridView冻结表头和列的需求在大数据量展示时尤为重要,因为表头的可见性有助于用户在浏览...
GridView动态添加模板列知识点汇总 在 ASP.NET 中,GridView控件是最常用的数据展示控件之一,然而,在实际开发中,我们经常需要根据不同的业务需求动态添加模板列,以满足不同的数据展示需求。那么,如何动态添加...
"GridView表格抬头列值复选筛选"就是这样一个功能,它允许用户通过复选框选择特定列的值,然后根据这些选择进行数据过滤,提高数据处理的效率和用户体验。 首先,我们需要理解GridView的基本结构。GridView由多个列...
在某些情况下,我们可能需要根据不同的业务需求,动态地向GridView中添加列。这在处理不确定数量或类型的数据时尤其有用。下面我们将详细介绍如何在C#中实现GridView动态添加列。 首先,我们来看一个简单的例子。在...
在传统的GridView配置中,列是在设计时静态定义的,但当数据源的列数或列名不确定,或者需要根据用户权限或条件显示不同的列时,动态添加列就显得尤为重要。这允许我们的应用程序更加灵活,能够适应不同的数据和场景...
关于DevExpress的GridView的过滤条件如何转成相应的语句,dev官网提供了相应的处理方法,方便开发人员调用,目前支持数据库语句有MS Sql 、Oracle 、Access,资源用到的Dev版本是18.1,为了保证能运行,相关程序集...
GridView是ASP.NET中一个常用的控件,用于展示数据表格,常用于网页开发。在实际应用中,有时我们需要在用户滚动页面时保持某些列或行始终可见,这就是所谓的“冻结列和行”功能。这个功能可以帮助用户更好地浏览和...
为了解决这个问题,我们可以实现“gridview冻结表头和列”的功能,确保表头和特定列在滚动时始终保持固定。 GridView 控件是ASP.NET中的一个强大组件,它允许我们以网格形式显示数据源中的数据,并提供了丰富的...
### GRIDVIEW实现EXCEL列冻结功能 在日常工作中,我们经常使用Excel来处理大量数据,尤其是在数据分析、报表制作等场景中。但是当表格中的数据量过大时,滚动查看数据会变得不太方便,尤其是当我们需要同时关注多列...
### GridView隐藏列的方法 在开发Web应用程序时,经常会遇到需要对`GridView`控件中的某些列进行隐藏处理的情况。这通常是为了改善用户界面或者保护敏感数据。本文将详细介绍如何通过编程方式来实现`GridView`中...
然而,默认情况下,GridView在滚动时会将所有行和列一起滚动,这可能不适用于某些场景,比如需要在用户滚动时保持表头或特定列固定可见。本篇文章将详细介绍如何通过修改来实现GridView的首行或列固定效果。 首先,...
"GridView中日期时间显示格式问题" 在 GridView 中,日期和时间的显示格式是一个常见的问题。今天,我们将讨论在 GridView 中如何正确地显示日期和时间的格式。 首先,我们需要了解GridView 中的数据绑定机制。在 ...
Gridview动态添加列 根据需要添加列和进行增删改操作 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等
foreach (GridViewRow row in GridView1.Rows) { if (row.RowType == DataControlRowType.DataRow) { total += Convert.ToDecimal(row.Cells[2].Text); } } // 显示总计 Label1.Text = "Total: " + total....
Gridview合并多列内容相同的行,相同的行内容相同实际合并,可以实际多列合并
显示/隐藏GridView的列源码 介绍: 这篇文章演示如果让用户有显示/隐藏他们需要的GridView的列的功能,这是非常有用的,因为在GridView的所有列并不是每个的用户都需要的.用户想根据自己的需求看到想要的列.而...
ASP.NET GridView 控件是.NET Framework中用于数据展示的重要组件,尤其在Web应用程序中,它提供了丰富的功能,如分页、排序、筛选等。在描述中提到的“asp.net gridview 固定标题和列”,指的是如何在GridView中...
3. 如果需要进一步控制,可以使用`ItemTemplate`和`BoundField`中的`("ColumnName", "format string") %>`表达式来实现特定列的格式化。 记住,如果你的数据源(如数据库)已经包含默认格式,你也可以选择直接使用...
因此,“gridview固定冻结列与表头”这一功能变得尤为重要。 固定列和表头的主要目的是在用户滚动页面时保持某些列(通常是第一列或最左边的列)和表头可见,以便始终保持对数据结构的清晰理解。实现这一功能通常...
### GridView动态创建列头与自定义多行合并表头 #### 一、概述 在Web开发中,`GridView` 控件被广泛应用于显示表格数据。它不仅提供了强大的数据绑定功能,还支持各种自定义设置,使得开发者能够根据具体需求灵活...