这可能是一个愚蠢的问题,但我在yii中有点新,并且对这个简单的视图有问题。 我有这样的数据:
id name 1 agenda 2 task 3 notes
id user due_at created_at task_type_id description
我想将它们作为议程和任务单独显示,并在不同的html视图中注释如下:
due_at description
due_at created_at description
description
我不希望任何花哨的用户过滤,因为这些表只显示当前一周的首页最多一周,并且将有专门用于此类任务的单独页面。这只是作为快速任务的首页。我一直在尝试CGridView但不能过滤它而不让html过滤器出现。我需要在due_at中进行过滤,并在目标范围内过滤due_at,然后按用户进行过滤。
有人可以帮我创建吗?
提前谢谢
答案 0 :(得分:1)
如果您想使用CGridView
,则需要注意一些事项,并且它们如下:
使用DataProvider :CGridView需要数据提供程序作为其输入。 data provider是:
数据提供程序是可以为小部件(如数据网格,数据列表)提供数据的组件。除了提供数据外,它们还支持分页和排序。
根据您当前的要求,您可以使用CActiveDataProvider
。所以你的gridview代码需要这个:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
));
将此数据提供程序从控制器操作传递到视图。
使用条件:您可以在condition
CActiveDataProvider
属性中传递所有这些$dataProvider
。该标准是criteria
的对象。所以你的$dataProvider=new CActiveDataProvider('Agenda',array(
'criteria'=>array(
'condition'=>'task_type_id=1 AND due_at BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 WEEK)',
'select'=>'due_at, description' // columns you want to select
)
));
可以是:
condition
select
属性是:
查询条件。这是指SQL语句中的WHERE子句。例如,年龄> 31 AND team = 1。
filter
属性为:
正在选择的列。这是指SQL语句中的SELECT子句。该属性可以是字符串(以逗号分隔的列名称)或列名称数组。默认为'*',表示所有列。
不指定过滤器:要不显示过滤器,请不要将任何$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
//'filter'=>$model // don't pass any filter
));
属性值传递给网格:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'agenda-grid',
'dataProvider'=>$dataProvider,
'columns'=>array(
'due_at',
'description'
)
));
使用列:使用CDbCriteria
仅显示您要显示的特定列:
id
同时传递id
,该div
将成为此网格{{1}}的{{1}},如果您不想要自动生成的ID。
就是这样,你应该按照上述步骤得到你想要的东西。