加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – yii CGridView过滤器与关系

发布时间:2020-12-13 22:10:00 所属栏目:PHP教程 来源:网络整理
导读:我正在使用yii作为我的Web应用程序.在我的一个视图中,我有CGridView和dataprovider是Mail模型.在这个模型中,我与其他3个模型有关.在网格中,我显示了三个模型的cols.如何过滤CGridView? 更新: ?php $dialog = $this-widget('ext.ecolumns.EColumnsDialog',a
我正在使用yii作为我的Web应用程序.在我的一个视图中,我有CGridView和dataprovider是Mail模型.在这个模型中,我与其他3个模型有关.在网格中,我显示了三个模型的cols.如何过滤CGridView?

更新:

<?php $dialog = $this->widget('ext.ecolumns.EColumnsDialog',array(
           'options'=>array(
                'title' => 'Layout settings','autoOpen' => false,'show' =>  'fade','hide' =>  'fade',),'htmlOptions' => array('style' => 'display: none'),//disable flush of dialog content
           'ecolumns' => array(
                'gridId' => 'mails-grid',//id of related grid
                'storage' => 'session',//where to store settings: 'db','session','cookie'
                'fixedLeft' => array('CCheckBoxColumn'),//fix checkbox to the left side 
                'model' => $dataprovider,//model is used to get attribute labels
                'columns'=>array(
                                array(
                                    'name'=>'mailTemplate.name','filter'=>CHtml::activeTextField($dataprovider,'mailTemplate'),'sendDate',array(
                                        'name'=>'mailTemplate.subject',array(
                                'name'=>'client.email','client'),array(
                                'name'=>'client.name',array(
                                'name'=>'operator.username','operator'),array(
                                'name'=>'status','value'=>array('MailHelper','getEmailStatus'),'filter'=> CHtml::activeDropDownList($dataprovider,'status',Mail::getEmailStatuses()),array(
                                'class'=>'CButtonColumn','template'=>'{update}','buttons'=>array(
                                                'update' => array(
                                                        'url'=>'$this->grid->controller->createUrl("/email/editTemplate",array("templateId"=>$data->id))',)
                        ),)
    ));

?>

<?php $this->widget('zii.widgets.grid.CGridView',array(
    'id' => 'mails-grid','dataProvider'=>$dataprovider->search(),'columns' => $dialog->columns(),'filter' => $dataprovider,'template' => $dialog->link()."{summary}n{items}n{pager}",)); ?>

解决方法

我有餐厅,城市,乡村和用户模型,他们之间的关系.

模型:

public function search() {
  $criteria=new CDbCriteria;
  $criteria->together = true;
  $criteria->with= array('xCountry','xCity','User');
  $criteria->compare('Id',$this->Id,true);
  $criteria->compare('Restaurant.Name',$this->Name,true);
  $criteria->addSearchCondition('xCountry.Name',$this->Country);
  $criteria->addSearchCondition('xCity.Name',$this->City);
  $criteria->compare('Zip',$this->Zip,true);
  $criteria->compare('Address',$this->Address,true);
  $criteria->compare('Description',$this->Description,true);
  $criteria->compare('Restaurant.Active',$this->Active,true);
  $criteria->addSearchCondition('User.Username',$this->Owner);
  $criteria->compare('Lat',$this->Lat);
  $criteria->compare('Lon',$this->Lon);

  return new CActiveDataProvider($this,array(
    'criteria'=>$criteria,));
}

视图:

$this->widget('zii.widgets.grid.CGridView',array(
      'id'=>'restaurant-grid','dataProvider'=>$model->search(),'filter'=>$model,'columns'=>array(
        'Id','Name','Zip','Address','Active',array(
          'name' => 'User.Username','header' => 'Username','filter' => CHtml::activeTextField($model,'Owner'),'value' => '$data->User->Username',array(
          'name' => 'xCountry.Name','header' => 'Country','Country'),'value' => '$data->xCountry->Name',array(
          'name' => 'xCity.Name','header' => 'City','City'),'value' => '$data->xCity->Name',array(
        'class'=>'CButtonColumn',));

我希望这可以帮到你.

更新:

如果您尝试这样的事情怎么办:

...
'columns'=>array(
  'mailTemplate.name','mailTemplate.subject','client.email',...

更新#2:

准备好自己这会有点脏.

假设我们有两个类,A和B. B属于A.
B有一个属性,让我们说“颜色”,我们想在我们列出“A”的网格中显示它.

您要做的第一件事是,手动为数据提供程序类创建属性(什么是“A”).
此属性将为“colorOfB”,因此您必须添加“public $colorOfB;”你的模特A.

添加此属性的条件:

$criteria->compare('B.color',$this->colorOfB,true);

将列添加到网格:

array(
  'name' => 'B.color','header' => 'Color of B','colorOfB'),'value' => '$data->B->color'),

最后一件事是在A的控制器中手动设置此属性:

$modelA = new A('search');
$modelA->colorOfB = $_GET['A']['colorOfB'];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读