`
hudeyong926
  • 浏览: 2033219 次
  • 来自: 武汉
社区版块
存档分类
最新评论

YII CGridView CListView 返回列表带记忆功能

阅读更多

我们知道Yii 中的CGridview 很好用,但是有时候不能满足我们的页面高制定性,这个时候更加灵活的CListView(只支持CActiveDataProvider) 就可以帮助我们解决这些问题CListView好更容易排版面和样式

CGridView是Yii中的一个灵活的插件GridView的每列为一个CGridColumn对象,通过Column加class来调用

例如它使用CButtonColumn来为每行生成按钮.在这里我们会介绍怎么根据需求自定义按钮.
默认按钮
默认情况下 CButtonColumn 包含三个按钮:{查看(view)},{更新(update)}和{删除(delete)} ,它们的含义是显而易见的.

自定义它们的外观和行为的最简单的方法是使用CButtonColumn的属性,如:

updateButtonImageUrl (更新update 按钮的图片路径),

updateButtonLabel (更新按钮的标签,没有经过HTML编码) ,

updateButtonOptions (更新按钮的HTML选项,向其他插件的htmlOptions 属性一样)和 updateButtonUrl (通过PHP表达式得出的URL).你可以找到每个按钮各自的属性.

此外:

  1. 只有删除(delete)按钮拥有 deleteConfirmation (string) 属性,它用作点击删除按钮后显示的自定义确认信息.
  2. xxxButtonUrl 属性的 PHP 表达式中 $row 表示行号(从0开始),$data 表示数据模型(model),$this 表示列对象.
  3. 当你设置 xxxButtonImageUrl 的属性为空或 false 时,文本形式的链接将会代替图片显示或imageUrl'=>false

更灵活的定制

通过上面的属性自定义多个按钮在代码中时很混乱的,通过 模板(template)按钮(buttons) 属性可以更灵活的自定义多个按钮。

你可以通过一下设置模板(template)属性的方式来构建或移除按钮.'header'  =>  '操作' , 

array(
	'class'=>'CButtonColumn',
	'header' => '操作',
	'template'=>'{delete}{update}', 					
),

在上例 CGridView 的按钮列中没有查看(view)按钮,而删除(delete)和更新(update)按钮为默认设置(删除按钮放到第一个位置).

隐藏按钮{update}{delete}

array(
    'class'=>'CButtonColumn',
    'deleteButtonOptions'=>array('style'=>'display:none'),
    'updateButtonOptions'=>array('style'=>'display:none'),
    'template'=>'{view}{update}{delete}',
),

同样你可以通过此属性添加新按钮 :{up}{down}

array(
    'class'=>'CButtonColumn',
    'template'=>'{up}{down}{delete}',
) 

对于新的按钮(当然已有的也一样)你必须指定外观和行为.CButtonColumn 的属性 buttons 就是用来做这的,它是由每个按钮的ID(名称必须和template 提供的相同)对应其属性组成的数组.

你可以使用一下代码:

'buttonID' => array(
    'label'=>'...',     //按钮的文本标签.
    'url'=>'...',       //使用 PHP 表达式得出按钮的 URL.
    'imageUrl'=>'...',  //按钮的图片路径.
    'options'=>array(), //按钮的 HTML 选项.
    'click'=>'...',     //当点击按钮时调用的 javascript 函数
    'visible'=>'...',   //确定按钮是否显示的 PHP 表达式
)

请注意: 当使用文字链接时 label 属性就会显示,当使用图片链接时 label 属性会被渲染为图片的 alt 参数.如果你想修改图片的 tooltip 文字,你可以修改 options 属性中的 title 参数,如:

'buttonID' => array(
    'label' => 'Text shown as alt text to image or as label to text link...',
    'url' => '"#"',
    'visible' => '$data->score > 0',
    //'click'=>'function(){$("#dialog_id").dialog("open"); return false;}',
    'options' => array(
        'title' => 'Text shown as tooltip when user hovers image...',
        'onclick' => 'alert("确认要查看吗?");return false;',
    ),
), 

此外:

  1. urlvisible 属性的 PHP 表达式中 $row 表示行号(从0开始),$data 表示数据模型(model),$this 表示列对象.
  2. 当你设置 xxxButtonImageUrl 的属性为空或 false 时,文本形式的链接将会代替图片显示.

最后这里有一个添加新按钮的例子:

array(
    'header'  =>'操作',
    'class'   =>'CButtonColumn',
    'template'=>'{email}',
    'buttons' =>array  (
        'email' => array  (
            'label'=>'Send an e-mail to this user',
            'imageUrl'=>Yii::app()->request->baseUrl.'/images/email.png',
            'visible'=>'$data->score > 0',
            'url'=>'Yii::app()->createUrl("users/email", array("id"=>$data->id))',
        )
    ),
)

在上面的例子中同样可以看出怎么创建一个包含控制器视图和用户ID(或当前行的其他数据)的有效URL,同样也可以看出怎么使用 CHttpRequest 类中的 baseUrl 函数来设置存放在 protected 文件夹外的图片.

指定删除按钮的确认信息

你可能会注意到使用 Gii 生成的标准 CRUD 操作中的删除菜单项包含确认信息.这个信息可以很容易地 修改或扩展到数据中的指定记录,如记录ID.
因为 deleteConfirmation 属性不会在 CGridView 中的 CButtonColumn 中解析,所以实现不是这么简单,这里又一个巧妙的方式使用 jQuery 来实现它下面是例子:
array(
        'class'=>'CButtonColumn',
        'deleteConfirmation'=>"确认删除",
),
js
function getCheckList() {
    var data = new Array();
    $("input:checkbox[name='selectids[]']").each(function () {
        if ($(this).prop("checked") == true) {
            data.push($(this).val());
            //data.push({service_type_id: 11, service_id: 451});
        }
    });
    if (data.length > 0) {
        $.post("index.php?r=ip/delall", {'ids':data}, function (data) {
            if (data == 'ok') {
                alert('删除成功!');
            }
        });
    } else {
        alert("请选择要删除的选项!");
    }
}

序号,链接,复选框

如果你想链接单元格在网格视图中的内容,在订单列表中的某些页面,例如,如果你想客户的名称是管理客户的详细信息页面的链接,改变列CGrid查看
'columns' => array(
    array(
        'class' => 'CCheckBoxColumn',
        'selectableRows' => 2,
        'footer' => '<button type="button" onclick="getCheckList();" style="width:76px">批量删除</button>',
        'headerHtmlOptions' => array('width' => '33px'),
        'headerTemplate'=>'{item}全选',
        'checkBoxHtmlOptions' => array('name' => 'selectids[]'),
        'disabled'=>'$data->status>0', //状态>0的禁用
        'checked'=>'$data->status>0',
    ),
    array(
        'name' => '序号', //$this->grid->dataProvider->getTotalItemCount() 总条数
        'value' => '$this->grid->dataProvider->getPagination()->getOffset()+($row+1)', //CDataColumn $this->grid
        'htmlOptions' => array(
            'width' => '5px',
        ),
    ),
    array(
        'type' => 'html', //link
        'value' => 'CHtml::link( $data->name,Yii::app()->createUrl( "admin/view", array("id"=>$data->user_id, "m"=>"users")) )',
    ),
    array(
        'name' => 'orderby',
        'type' => 'raw',
        'value' => 'CHtml::textField("id[$data->id]", $data->orderby)' 
    ),
    array(
         'name'=>'orders.status', //使用外联表的label
         'value'=>'Orders::model()->getOrderStatusList($data->orders->status)'
    ),
    array(
        'name' => 'type',//失败是红色,成功是绿色
        'type'=>'raw',
        'value' => 'CHtml::tag("font",array("color"=>$data->type?"red":"green"),$data->getTypeList($data->type))'
    ),
    array(
        'filter' => CHtml::listData($list, 'id', 'name'), //select filter
        'name' => 'offer_id',
        'value' => '$data->offer->name'
    ),
)

"Type"代表属性的类型.它确定属性值怎样被格式化和显示. 它默认为'text'. "Type"应该CFormatter被识别, 这些"Type"值是有效的: raw , text, ntext, html, date, time, datetime , boolean, number, email , image , url

返回列表带记忆功能:如果存在多页文章数据,在界面上浏览到后面的文章页,然后查看某个文章的信息,这个时候再回退的时候,总是返回到列表的第一页,而不是刚才的历史页面。

通用做法将当前页面的地址(包括参数)存起来(如果是post参数存cookie之类的)可以在查看页面中放一个隐藏字段:

<input type="hidden" value="<?php echo Yii::app()->request->urlReferrer;?>" id="backurl" name="backurl">
也就是把列表历史页面的路径做为请求参数传
$this->redirect($_POST['backurl']);
判断是否有记录
$model->search()->getTotalItemCount()
 
 
 
 
 
分享到:
评论

相关推荐

    Yii CGridView用法实例详解

    Yii框架中的CGridView是一个用于展示数据列表的强大工具,其主要功能包括显示数据、支持排序、分页以及通过AJAX请求数据。CGridView广泛应用于Web应用程序中,提供了一个高度可定制的网格视图组件。在本文中,我们...

    Yii视图CGridView列表用法实例分析

    Yii框架中的CGridView是用于创建数据表格视图的一个强大组件,它允许开发者以灵活的方式展示数据,并提供了排序、分页、筛选以及各种自定义功能。本实例将深入讲解CGridView在Yii视图中的使用方法,以及如何通过实例...

    Yii把CGridView文本框换成下拉框的方法

    Yii框架的CGridView组件是用于展示数据表格的强大工具,它提供了丰富的功能,如排序、过滤、分页等。然而,在默认设置中,CGridView的过滤器通常为文本框,这可能无法满足所有用户的需求,特别是在需要展示选项列表...

    Yii中CGridView关联表搜索排序方法实例详解

    本文实例讲述了Yii中CGridView关联表搜索排序方法。分享给大家供大家参考。具体实现方法如下: 在Yii CGridView 关联表搜索排序实现方法有点复杂,今天看了一老外写的了篇游戏,下面我整理一下与各位朋友分享一下,...

    yii1.1.10 开发包(包含yii权威指南以及yii博客例子讲解)

    7. **Ajax支持**:Yii 提供了强大的Ajax功能,如Yii CGridView和CListView,可以轻松创建数据驱动的交互式界面。 8. **Gii代码生成工具**:Gii 是Yii自带的代码生成工具,能自动生成模型、控制器、表单和CRUD操作,...

    Yii框架扩展CGridView增加导出CSV功能的方法

    本文实例讲述了Yii框架扩展CGridView增加导出CSV功能的方法。分享给大家供大家参考,具体如下: Yii提供的CGridView组件没有内置数据导出功能,不过我们可以通过扩展该组件来添加该功能。 具体方法如下: 1、首先...

    Yii中CGridView禁止列排序的设置方法

    在Yii框架中,CGridView是一个非常实用的组件,主要用于在Web页面上展示数据列表,并且支持排序、分页以及AJAX数据请求等高级功能。CGridView广泛应用于各种需要以表格形式显示数据的场景,比如管理后台的数据显示、...

    Yii中CGridView实现批量删除的方法

    CGridView是Yii框架中用于显示数据列表的组件,可以展示来自数据库的多条记录,并且具备分页、排序、选择等高级功能。在Web应用中,批量删除记录的需求十分常见,本文详细介绍如何在Yii框架下使用CGridView实现批量...

    yii2 通用后台系统

    "yii2 通用后台系统"是一个基于Yii2框架构建的企业级后台管理系统,旨在提供一套全面、高效的后台管理解决方案,包括用户管理、权限控制、数据统计等功能,帮助开发者快速搭建稳定且功能丰富的后台应用。 在Yii2...

    Yii2.0打造京东商城平台PHP电商实战Yii2.0视频教程

    教程名称:Yii2.0 打造京东商城平台 PHP电商实战 Yii2.0视频教程 教程内容: 包含了电商的所有功能模块:商品展示、购物车功能、下单支付、发货、确认收获、商品管理、订单管理。电商API接口开发。Yii2.0级基于Yii...

    Yii权威指南思维导图

    Yii的思维导图将这些关键概念以图形化的方式呈现,帮助开发者快速理解和记忆框架结构。它可能会包括类之间的层级关系、主要组件的图标、关键类的功能描述等,使得学习过程更为直观和高效。 综上所述,"Yii权威指南...

    yii框架中文文档、yii中文手册教程

    13. **拓展和插件**:如何创建和使用第三方扩展,增强框架功能。 通过这些文档,开发者可以深入理解Yii框架的机制,并学会如何有效地利用它来构建强大的Web应用。同时,Yii社区活跃,有许多优秀的教程和示例代码供...

    yii手册,Yes it is!

    Yii的CGridView和CListView组件提供了强大的数据展示功能,而CFormModel则简化了表单处理。 标签"php yii"表明这是关于PHP语言的特定框架内容。Yii与PHP的结合使得开发者能够利用PHP的灵活性和Yii的高性能来构建...

    Yii视图CGridView实现操作按钮定义地址示例

    在Yii框架中,CGridView是用于展示数据集的强大的组件,尤其适合于表格形式的数据展示。这个组件提供了很多自定义选项,包括操作列(Action Column)中的按钮,如查看、编辑和删除等。本篇文章将深入讲解如何在...

Global site tag (gtag.js) - Google Analytics