nicklung 发表于 2011-4-24 13:11:28

发个自己扩展的CI HTML表格类

本帖最后由 nicklung 于 2011-4-24 13:33 编辑

细读了CI的表格类,发现可扩展性还是比较强的,他自身不带列控制的方法,故扩展了一个便于使用

<?php
class MY_Table extends CI_Table
{
var $table_attr   = array( 'class'   => 'tbstyle',
          'width'   => '100%',
          'cellspacing' => 2);   // table属性
var $heading_class= 'thstyle';      // 标题自定义class
var $body_class1= 'tdstyle1';      // 表格体奇数行class
var $body_class2= 'tdstyle2';      // 表格体偶数行class
var $body_attr   = array();         // 表格体td扩展属性
    function __construct()
    {
      parent::__construct();
    }
    function _init_table()
    {
$temp = '<table>';
foreach ($this->table_attr as $key => $val) {
   $temp = str_replace('<table', "<table $key=\"$val\"", $temp);
}
$this->template['table_open'] = $temp;
$this->template['heading_cell_start'] = "<th class=\"$this->heading_class\">";
    }
function set_body($key = '', $data = array())
{
$this->body_attr[$key] = $data;
}
function _set_body($body)
{
   if(count($body) == 0) {
   return;
   }
$i = 0;
foreach($body as $row) {
   $class = $i % 2 == 0 ? $this->body_class1 : $this->body_class2;
   $j = 0;
   foreach($row as $cell) {
    if(is_array($cell)){
   foreach($this->body_attr as $key => $val) {
      $body1[$i][$j][$key] = $val[$j];
   }
    }
    else {
   $body1[$i][$j]['data'] = $cell;
   $body1[$i][$j]['class'] = $class;
   foreach($this->body_attr as $key => $val) {
      $body1[$i][$j][$key] = $val[$j];
   }
    }
    $j++;
   }
   $i++;
}
return $body1;
}
function generate($table_data = NULL)
{
$this->_init_table();
   $table_data = $this->_set_body($table_data);
return parent::generate($table_data);
}
}
?>



下面是调用示例:

$this->load->library('table');
$this->table->set_caption('系统登陆日志');
$this->table->set_heading('用户名','是否成功','登陆IP地址','登陆时间');
$this->table->set_body('width', array(0, 120, 100, 150));
$this->table->set_body('align', array('center', 'center', 'center', 'center'));
$data = $this->table->generate($rss);




可以使用set_body方法给单列设置属性(列宽、对齐方式是最常用的,其他属性也可以)
$this->table->set_body('width', array(0, 120, 100, 150)); //列宽为0的表示撑满表格宽度,也是窗体宽度变化时的宽度可变列

效果图(配合CSS)


欢迎大家拍砖,并继续扩展,有了好的扩展方案请通知我交流

lnlingyuan 发表于 2011-5-2 08:50:20

学习了:victory:

ohmygod 发表于 2011-5-15 23:56:11

学习了:victory:

xiaotiefei 发表于 2011-8-14 22:56:41

:victory: 学习中

ntdba 发表于 2013-3-26 21:20:38

我试了不行,有例子下载吗?
页: [1]
查看完整版本: 发个自己扩展的CI HTML表格类