表格類提供了多個函數,允許你從數組或者資料庫結果集中自動產生HTML表格。
初始化類
像CodeIgniter的其它類一樣, 在控制器中使用$this->load->library 函數來初始化表格類:
$this->load->library('table');
一旦被載入,可以這樣建立一個表格庫對象的執行個體: $this->table
例子
此例示範如何通過一個多維陣列(multi-dimensional array)自動產生表格。
注意:數組的第一個索引將成為表頭(或者你可以通過set_heading()函數自訂表格頭)。
$this->load->library('table');$data = array( array('Name', 'Color', 'Size'), array('Fred', 'Blue', 'Small'), array('Mary', 'Red', 'Large'), array('John', 'Green', 'Medium') );echo $this->table->generate($data);
:
下面是一個由資料庫查詢結構建立而成的表格例子。
表格類會基於表格的名字自動地產生表格標題(參考下面記述的函數,你可以使用set_heading()函數設定你自己的標題)。
$this->load->library('table');$query = $this->db->query("SELECT * FROM my_table");echo $this->table->generate($query);
效果:
此例示範了如何使用連續的參數建立一個表格:
$this->load->library('table');$this->table->set_heading('Name', 'Color', 'Size');$this->table->add_row('Fred', 'Blue', 'Small');$this->table->add_row('Mary', 'Red', 'Large');$this->table->add_row('John', 'Green', 'Medium');echo $this->table->generate();
這個簡單的例子,除了更換個別的參數外,還使用了數組:
$this->load->library('table');$this->table->set_heading(array('Name', 'Color', 'Size'));$this->table->add_row(array('Fred', 'Blue', 'Small'));$this->table->add_row(array('Mary', 'Red', 'Large'));$this->table->add_row(array('John', 'Green', 'Medium'));echo $this->table->generate();
修改表格的外觀
表格類允許你以你指定的設計編排,去設定表格模板。這裡是模板的原型:
$tmpl = array ( 'table_open' => '<table border="0" cellpadding="4" cellspacing="0">', 'heading_row_start' => '<tr>', 'heading_row_end' => '</tr>', 'heading_cell_start' => '<th>', 'heading_cell_end' => '</th>', 'row_start' => '<tr>', 'row_end' => '</tr>', 'cell_start' => '<td>', 'cell_end' => '</td>', 'row_alt_start' => '<tr>', 'row_alt_end' => '</tr>', 'cell_alt_start' => '<td>', 'cell_alt_end' => '</td>', 'table_close' => '</table>' );$this->table->set_template($tmpl);
注意: 在這個模板,你會發現這裡有兩個"row"塊設定項。 這是允許你建立隔行顏色,或者設計每行資料的重複間隔元素。
你不必提交全部的模板。如果你只想改變編排的一部分,你可以簡單地提交那部分的元素。在這個例子裡,只有表格的開始標籤被更改:
$tmpl = array ( 'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">' );$this->table->set_template($tmpl);
函數參考:
$this->table->generate()
返回一個包含產生的表格的字串。 接受一個可選的參數,該參數可以是一個數組或是從資料庫擷取的結果對象。
$this->table->set_caption()
允許你給表格添加一個標題
$this->table->set_caption('Colors');
$this->table->set_heading()
允許你設定表格的表頭。你可以提交一個數組或分開的參數:
$this->table->set_heading('Name', 'Color', 'Size');$this->table->set_heading(array('Name', 'Color', 'Size'));
$this->table->add_row()
允許你在你的表格中添加一行。你可以提交一個數組或分開的參數:
$this->table->add_row('Blue', 'Red', 'Green');$this->table->add_row(array('Blue', 'Red', 'Green'));
如果你想要單獨設定一個儲存格的屬性,你可以使用一個關聯陣列。
關聯鍵名 'data' 定義了這個儲存格的資料。
其它的索引值對 key => val 將會以 key='val' 的形式被添加為該儲存格的屬性:
$cell = array('data' => 'Blue', 'class' => 'highlight', 'colspan' => 2);$this->table->add_row($cell, 'Red', 'Green');// 產生// <td class='highlight' colspan='2'>Blue</td><td>Red</td><td>Green</td>
$this->table->make_columns()
這個函數以一個一維數組為輸入,建立一個二維數組,它的深度和列數一樣。這個函數可以把一個帶有多個元素的單一數組根據表格的列數進行整理並顯示。參考下面的例子:
$list = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve');$new_list = $this->table->make_columns($list, 3);$this->table->generate($new_list);
產生的HTML代碼如下:
<table border="0" cellpadding="4" cellspacing="0"><tr><td>one</td><td>two</td><td>three</td></tr><tr><td>four</td><td>five</td><td>six</td></tr><tr><td>seven</td><td>eight</td><td>nine</td></tr><tr><td>ten</td><td>eleven</td><td>twelve</td></tr></table>
$this->table->set_template()
允許你設定你的模板。你可以提交整個模板或局部模板。
$tmpl = array ( 'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">' );$this->table->set_template($tmpl);$this->table->set_empty()
使你能設定一個預設值,用來顯示在表格中內容為空白的儲存格。 例如,你可以設定一個non-breaking space(用來防止表格邊框破損的空格):
$this->table->set_empty(" ");$this->table->clear()
使你能清除表格的表頭和行中的資料。如果你需要顯示多個有不同資料的表格,那麼你需要在每個表格產生之後調用這個函數來清除之前表格的資訊。例如:
$this->load->library('table');$this->table->set_heading('Name', 'Color', 'Size');$this->table->add_row('Fred', 'Blue', 'Small');$this->table->add_row('Mary', 'Red', 'Large');$this->table->add_row('John', 'Green', 'Medium');echo $this->table->generate();$this->table->clear();$this->table->set_heading('Name', 'Day', 'Delivery');$this->table->add_row('Fred', 'Wednesday', 'Express');$this->table->add_row('Mary', 'Monday', 'Air');$this->table->add_row('John', 'Saturday', 'Overnight');echo $this->table->generate();$this->table->function
允許你指定一個本地的PHP方法或一個有效方法應用到所有的儲存格中的資料的數組對象。
$this->load->library('table');$this->table->set_heading('Name', 'Color', 'Size');$this->table->add_row('Fred', '<strong>Blue</strong>', 'Small');$this->table->function = 'htmlspecialchars';echo $this->table->generate();
在上面的例子中,所有儲存格中的資料都可以通過PHP的htmlspecialchars()方法實現html轉義,其結果如下:
<td>Fred</td><td><strong>Blue</strong></td><td>Small</td>