歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Yii CGridView 基本使用

在 Yii 自動生成的代碼裡,我們總能在 admin 的界面看到 CGridView 的身影。這是一個很好用的展示數據的表格控件,用的好可以明顯地加快開發進度。下面就讓我們來探索一下 CGridView 的基本使用吧:

Yii 用戶登陸機制  http://www.linuxidc.com/Linux/2015-01/111602.htm

Yii中引入js和css文件  http://www.linuxidc.com/Linux/2015-01/111603.htm

Yii 不完全解決方案  http://www.linuxidc.com/Linux/2015-01/111606.htm

簡單起見,我們的代碼就用 Yii demo 中的 blog 例子來做修改。首先,這是修改後的部分 MySQL 語句:

drop table if exists `tbl_user`;
CREATE TABLE tbl_user
(
 `user_id` INTEGER NOT NULL AUTO_INCREMENT comment '主鍵',
 `username` VARCHAR(128) NOT NULL comment '用戶名',
 `nickname` VARCHAR(128) NOT NULL comment '昵稱',
 `password` VARCHAR(128) NOT NULL comment '密碼',
 `email` VARCHAR(128) NOT NULL comment '郵箱',
 `is_delete` tinyint not null default 0 comment '刪除標志',
 unique key(`username`),
 primary key (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 comment='用戶表';

drop table if exists `tbl_post`;
CREATE TABLE tbl_post
(
 `post_id` INTEGER NOT NULL AUTO_INCREMENT comment '主鍵',
 `title` VARCHAR(128) NOT NULL comment '標題',
 `content` TEXT NOT NULL comment '文章內容',
 `tags` TEXT comment '標簽',
 `status` INTEGER NOT NULL comment '狀態,0 = 草稿,1 = 審核通過,-1 = 審核不通過,2 = 發布',
 `create_time` INTEGER comment '創建時間',
 `update_time` INTEGER comment '更新時間',
 `author_id` INTEGER NOT NULL comment '作者',
 `is_delete` tinyint not null default 0 comment '刪除標志',
 CONSTRAINT `post_ibfk_1` FOREIGN KEY (author_id)
  REFERENCES tbl_user (`user_id`) ON DELETE CASCADE ON UPDATE RESTRICT,
 primary key (`post_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 comment='日志表';

兩個表一個存儲作者信息一個存儲日志,其中日志有一個外鍵關聯到 user。兩個表裡面的 is_delete 字段是標志該條記錄是否被刪除,0 為未刪除,1 為已刪除。讓我們看一下用 gii 生成的 Post 類的 relation 方法:

 /**
  * @return array relational rules.
  */
 public function relations()
 {
  // NOTE: you may need to adjust the relation name and the related
  // class name for the relations automatically generated below.
  return array(
   'comments' => array(self::HAS_MANY, 'Comment', 'post_id'),
   'author' => array(self::BELONGS_TO, 'User', 'author_id'),
  );
 }

其中的 author 外鍵作為 BELONGS_TO 關系存在,符合我們的預期。

說了這麼多,看看自動生成的 Post 中 admin.php 裡 CGridView 的代碼吧:

<?php $this->widget('zii.widgets.grid.CGridView', array(
 'id'=>'post-grid',
 'dataProvider'=>$model->search(),
 'filter'=>$model,
 'columns'=>array(
  'post_id',
  'title',
  'content',
  'tags',
  'status',
  'create_time',
  'update_time',
  'author_id',
  'is_delete',
  array(
   'class'=>'CButtonColumn',
  ),
 ),
)); ?>

看!雖然我們什麼都沒寫,但這就是這個控件的最基礎使用了。dataProvider 是由 model 裡面的 search 函數提供的數據,filter...暫時看不出這裡的作用,columns 控制展示的每一列,其中最後一項的 CButtonColumn 向我們展示了三個按鈕,分別是 查看  更新 和 刪除。

接下來我們一點點地改造.

用 CGridView 展示我們真正要的數據形式:

很多時候,數據庫裡的東西不適合直接展示給用戶看,需要我們進行一定的處理之後才適合閱讀。但在這裡不經修改的話 CGridView 只會把數據庫的值原封不動地呈現,所以,我們應該在相應的字段進行修改。比如 is_delete 字段,數據庫裡存放的是 0 和 1,但是在這裡閱讀就不太好了,我們應該改成 1 展示 '是' ,0展示 '否'。看看下面的代碼,我們用了一個 array,兩個鍵分別是 name 和 value,name 對應的要填寫該 model 擁有的字段,而 value 是你想展示的數據,這裡可以寫成一個 php 語句,作為可以執行的代碼。看到這裡,是不是覺得對這個 value 我們可以做很多東西?有的同學可能要問,如果我想執行的代碼很長,難道都寫在 value 裡面?。。。我說同學,你不會在其他地方寫成一個函數然後在這裡調用它嗎??

<?php $this->widget('zii.widgets.grid.CGridView', array(
 'id'=>'post-grid',
 'dataProvider'=>$model->search(),
 'filter'=>$model,
 'columns'=>array(
  'post_id',
  'title',
  'content',
  'tags',
  'status',
  'create_time',
  'update_time',
  'author_id',
  'is_delete',
        array(
            'name'=>'is_delete',
            'value'=>'is_delete?"是":"否"' //value 是可以執行 php 語句的哦
        )
  array(
   'class'=>'CButtonColumn',
  ),
 ),
)); ?>

除此之外,還有一些常用的選項,都可以在 array 裡面填寫,下面是比較常見的使用方式(其他部分代碼省略):

        array(
            'name'=>'is_delete',
            'value'=>'is_delete?"是":"否"' //value 是可以執行 php 語句的哦
            'filter' => array(0=>'否',1=>'是'), //自己定義搜索過濾的方式,這裡為 是 和 否 的下拉菜單
            'htmlOptions'=>array('class'=>'delete'),  //可以定義 html 選項,這裡是定義了帶一個 delete 的類
        ),

上面我們用 name 的話那是 model 裡原來就有的字段,如果我們想展示自己定義的新內容呢,用 header :

        array(
            'header'=>'備注',
            'value'=> 'display your data'
        ),

PS:在這裡只談我常用的部分,詳細請看文檔:CGridView

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-01/111607p2.htm

Copyright © Linux教程網 All Rights Reserved