我正在使用CGridView来显示postgres函数的结果。 CGridView工作正常。现在我想在模型中使用不同的函数来过滤CGridView。
CGridView的当前代码就像
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'purchase-grid',
'itemsCssClass'=>'table table-bordered table-condensed table-hover table-striped dataTable',
'filter'=>$model,
'dataProvider'=>$model->search(),
..............
$ model-> search()函数接受一个id,用于从表中选择行。我使用CSqlDataProvider在$ model-> search()中运行自定义查询并返回dataprovider。如果我使用上面的代码,它将显示CGridView中所有字段的过滤器文本框。但搜索功能使用的是CGridView中未显示的ID。所以过滤不起作用。所以我想使用一个新的过滤功能,它将接受该字段进行过滤。我尝试使用下面的代码
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'purchase-grid',
'itemsCssClass'=>'table table-bordered table-condensed table-hover table-striped dataTable',
'filter'=>$model->filter_search(),
'dataProvider'=>$model->search(),
..............
但它显示错误。请帮忙。
提前致谢。
答案 0 :(得分:0)
filter参数应该接收模型。如果您不想显示特定列应该执行的过滤器:
array(
'name'=>'attributeName',
'value'=>'$data->attributeName',
'filter'=>false,
)
答案 1 :(得分:0)
CGridView中的filter属性应该是CActiveRecord。
您可以像此代码一样更改过滤器输入
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'item-categoria-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'nombre',
array(
'id'=>'tipo_id',
'header'=>'Tipo',
'value'=>'$data->tipo->nombre',
'filter'=>CHtml::activeDropDownList(
$model,
"tipo_id",
CHtml::listData(TipoItem::model()->findAll(), 'id', 'nombre'),
array(
'empty'=>'(Seleccione uno)',
)),
),
'cuentaVenta.descripcion:html:Cuenta de Ventas',
注意:过滤器是CActiveRecord,列中的过滤器是Select
答案 2 :(得分:0)
CgridView自定义过滤器元素:
查看代码:
array(
'name'=>'status',
'header'=>'Confirmed',
'type'=>'raw',
'value'=>'($data->status==0 ? "No" : "Yes")',
'filter'=>CHtml::listData($pastEventModel->getYesNoCgridviewFilter(), 'id', 'title'),
),
型号代码:
public function getYesNoCgridviewFilter()
{
return array(
array('id'=>0, 'title'=>'No'),
array('id'=>1, 'title'=>'Yes'),
);
}
CgridView自定义搜索功能:
查看代码:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'events-grid2',
'dataProvider'=>$pastEventModel->search("past"),
'filter'=>$pastEventModel,
型号代码:
public function search($when)
{
$criteria=new CDbCriteria;
$criteria->compare('mandant_id',$this->mandant_id);
if($when == "past")
$criteria->addCondition("start < ". time(), 'AND');
elseif($when == "upcoming")
$criteria->addCondition("start >= ". time(), 'AND');
CgridView在同一页面上两次:
查看代码:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'events-grid1',
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'events-grid2',
控制器代码:
public function actionAdmin()
{
$pastEventModel=new Events('search');
$pastEventModel->unsetAttributes(); // clear any default values
if(isset($_GET['ajax'],$_GET['Events']) && $_GET['ajax']=="events-grid2")
{
$pastEventModel->attributes=$_GET['Events'];
unset($_GET['Events']);
}
$upComingEventModel=new Events('search');
$upComingEventModel->unsetAttributes(); // clear any default values
if(isset($_GET['ajax'],$_GET['Events']) && $_GET['ajax']=="events-grid1")
{
$upComingEventModel->attributes=$_GET['Events'];
unset($_GET['Events']);
}
$this->render('admin',array(
'pastEventModel'=>$pastEventModel,
'upComingEventModel'=>$upComingEventModel,
));
}
答案 3 :(得分:0)
我已使用下面给出的HtmlOptions隐藏了该列。
<div class="row">
<div id="left-bar"> here I have an accordion </div>
<div id="middle-bar"> heve a have my canvas </div>
<div id="right-bar"> and here I have an editor</div>
</div>
然后我使用相同的$ model-&gt; search()函数进行过滤。