YII CGridView和CDetailView心得简述

CGridView 很方便的管理列表,通过CButtonColumn可直接调入删改查按钮

请先看下例:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'manager-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
    'id',
    'username',
    'realname',
    array(
        //最后登陆时间
        'name' => 'LastLoginTime',
        'name' => 'lastlogin_time',
        'header' => CHtml::activeLabel($model,'lastlogin_time'),
        'value' => 'date("Y-m-d",$data->lastlogin_time)',
        'filter' => false,
    ),
    array(
        //可用
        'name' => 'enable',
        'header' => CHtml::activeLabel($model,'enable'),
        'value' => '$data->enable==1?"可用":"禁用"',
        'filter' => array('1'=>'可用','0'=>'禁用'),
        'headerHtmlOptions' => array('width'=>'70'),
        'htmlOptions' => array('align'=>'center'),
    ),
    array(
        'class'=>'CButtonColumn',
    ),
),
)); ?>
  • dataProvider是数据集合
  • filter是用户的过滤数据(可以理解是searchForm的submit数据)
  • columns是关键,数组里可以直接是字符串或数组。

当一列被指定为一个字符串, 他的格式应该设置为 "name:type:header", "type" 和 "header" 为可选. 在这种情况下将创建一个CDataColumn 实例, 其 CDataColumn::name, CDataColumn::type and CDataColumn::header 属性将被初始化.

当一列被指定为一个数组, 它将被用来创建一个表格列实例, 其中的“类”元素指定列的类名 (如果没有定义,默认为 CDataColumn). 目前, 有这些正是列类: CDataColumn, CLinkColumn, CButtonColumn 和 CCheckBoxColumn.

  • name就是数据项名称,进行排序和搜索时要用到;
  • type的有效值包括CGridView的可辨认:格式化,如:原料,文字,NTEXT,HTML,日期,时间,日期,布尔,号码,电子邮件,图像,URL。如需详细资讯,请参考CFormatter。默认为“文本”,这意味着该属性值将HTML编码。
  • header是列表上显示的项名称;

(重点)value是值,字符串会解析成代码段直接执行

  • filter定义检索,如果不定义,默认是文本框。如果false,为不显示检索。如果是数组,即显示为下拉选框。用法可参考上例。

CDetailView是显示一项数据的详细内容,很方便

例子:

<?php $this->widget('zii.widgets.CDetailView', array(
    'data'=>$model,
    'attributes'=>array(
    'id',
    'title', // 标题属性(用普通文本)
    'owner.name', // 相关对象的一个属性 "owner"
    'description:html', // 用HTML显示的描述属性
    array(
        //创建时间
        'label' => CHtml::activeLabel($model,'create_time'),
        'value' => date("Y-m-d",$model->create_time),
    ),
    array(
        //最后登陆时间
        'label' => CHtml::activeLabel($model,'lastlogin_time'),
        'value' => date("Y-m-d",$model->lastlogin_time),
    ),
    array(
        //可用
        'label' => CHtml::activeLabel($model,'enable'),
        'value' => MyFunc::checkR($model->enable),
        'type' => 'html',
    ),
),
)); ?>
  • CDetailView的使用我只做简单应用,认识也有限
  • data是数据,单条数据
  • attributes里也可以是字符串和数组

字符串:

一个属性可以被指定为一个字符串,使用格式:"Name:Type:Label". "Type" 和 "Label" 是可选的.

  • "Name"引用属性名.它可以是一个属性 (例如 "title")或一个子属性(例如 "owner.username").其中:html表示用解析为html,即
    会变成换行而不是直接输出;
  • "Label" 代表属性的标签.如果没有给定,"Name"将被用作产生一个适当的标签.
  • "Type" 代表属性的类型.它确定属性值怎样被格式化和显示. 它默认为'text'. "Type"应该formatter被识别.特别是, 如果"Type" 是 "xyz",那么formatter的"formatXyz" 方法将被触发格式化要显示的属性值.默认当CFormatter被使用的时候, 这些"Type"值是有效的: raw, text, ntext, html, date, time, datetime, boolean, number, email, image, url. 关于这些类型的更多细节, 请参考CFormatter.

数组:

一个属性在相应的数组中指定,它有如下元素:

  • label: 相应于属性的标签.如果这个没有指定,下面的"name"元素 将被用来产生一个适当的标签.
  • name: 属性名称. 这个可以是一个属性 or模型的一个子属性. 如果下面的"value"元素被指定,这将被忽略.
  • value: 要显示的值.这个没有指定,上面的"name"元素将被用来 element will be used 返回相应的属性值.注意,这个值将按照 下面描述的"type"选项进行格式化.
  • type: 属性的类型决定属性值怎样被格式化. 请看看上面可能的值.
  • cssClass: CSS class将被用于这个item.这个选项可用自1.1.3.
  • template: template用于渲染这个属性.如果这个没有指定, itemTemplate 将会替代它.更多设置这个选项的细节请参考itemTemplate. 这个选项可用自1.1.1.
  • visible: 是否这个属性是可见的.如果设置为false,为显示属性的表格行将不会被渲染.这个选项可用自1.1.5.

注意:value的值跟上面CGridView中的value有所不同,它可以直接执行函数,不需要用''。

若您觉得我的博文对您有帮助,欢迎点击下方按钮对我打赏
打赏