HTML 表格类
表格类提供方法,使您可以从数组或数据库结果集中自动生成 HTML 表格。
使用表格类
初始化类
表格类不是作为服务提供的,应该“正常”实例化,例如
<?php
$table = new \CodeIgniter\View\Table();
示例
以下示例展示了如何从多维数组创建表格。请注意,第一个数组索引将成为表格标题(或者您可以使用下面函数参考中描述的 setHeading()
方法设置自己的标题)。
<?php
$table = new \CodeIgniter\View\Table();
$data = [
['Name', 'Color', 'Size'],
['Fred', 'Blue', 'Small'],
['Mary', 'Red', 'Large'],
['John', 'Green', 'Medium'],
];
echo $table->generate($data);
以下示例展示了从数据库查询结果创建的表格。表格类将根据表名自动生成标题(或者您可以使用下面类参考中描述的 setHeading()
方法设置自己的标题)。
<?php
$table = new \CodeIgniter\View\Table();
$query = $db->query('SELECT * FROM my_table');
echo $table->generate($query);
这是一个示例,展示了如何使用离散参数创建表格
<?php
$table = new \CodeIgniter\View\Table();
$table->setHeading('Name', 'Color', 'Size');
$table->addRow('Fred', 'Blue', 'Small');
$table->addRow('Mary', 'Red', 'Large');
$table->addRow('John', 'Green', 'Medium');
echo $table->generate();
这是同一个示例,只是使用数组代替单个参数
<?php
$table = new \CodeIgniter\View\Table();
$table->setHeading(['Name', 'Color', 'Size']);
$table->addRow(['Fred', 'Blue', 'Small']);
$table->addRow(['Mary', 'Red', 'Large']);
$table->addRow(['John', 'Green', 'Medium']);
echo $table->generate();
更改表格外观
Table 类允许您设置表格模板,您可以使用它来指定布局的设计。以下是模板原型
<?php
$template = [
'table_open' => '<table border="0" cellpadding="4" cellspacing="0">',
'thead_open' => '<thead>',
'thead_close' => '</thead>',
'heading_row_start' => '<tr>',
'heading_row_end' => '</tr>',
'heading_cell_start' => '<th>',
'heading_cell_end' => '</th>',
'tfoot_open' => '<tfoot>',
'tfoot_close' => '</tfoot>',
'footing_row_start' => '<tr>',
'footing_row_end' => '</tr>',
'footing_cell_start' => '<td>',
'footing_cell_end' => '</td>',
'tbody_open' => '<tbody>',
'tbody_close' => '</tbody>',
'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>',
];
$table->setTemplate($template);
注意
您会注意到模板中有两组“row”块。这些允许您创建交替的行颜色或设计元素,这些元素随着每行数据的迭代而交替。
您不需要提交完整的模板。如果您只需要更改布局的某些部分,您只需提交这些元素即可。在本例中,仅更改了表格的开始标签
<?php
$template = [
'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">',
];
$table->setTemplate($template);
您还可以通过将模板设置数组传递给 Table 构造函数来设置默认值
<?php
$customSettings = [
'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">',
];
$table = new \CodeIgniter\View\Table($customSettings);
将行与标题同步
版本 4.4.0 中的新功能。
该 setSyncRowsWithHeading(true)
方法使每个数据值都放置在 setHeading()
中定义的同一列中,如果使用关联数组作为参数。这在处理通过 REST API 加载的数据时特别有用,在这种情况下,顺序不符合您的意愿,或者 API 返回了太多数据。
如果数据行包含标题中不存在的键,则其值将被过滤。相反,如果数据行没有标题中列出的键,则将在其位置放置一个空单元格。
<?php
$table = new \CodeIgniter\View\Table();
$table->setHeading(['name' => 'Name', 'color' => 'Color', 'size' => 'Size'])
->setSyncRowsWithHeading(true)
->addRow(['color' => 'Blue', 'name' => 'Fred', 'size' => 'Small'])
->addRow(['size' => 'Large', 'age' => '24', 'name' => 'Mary'])
->addRow(['color' => 'Green']);
echo $table->generate();
?>
<!-- Generates a table with this prototype: -->
<table border="0" cellpadding="4" cellspacing="0">
<thead>
<tr>
<th>Name</th>
<th>Color</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td>Fred</td>
<td>Blue</td>
<td>Small</td>
</tr>
<tr>
<td>Mary</td>
<td></td>
<td>Large</td>
</tr>
<tr>
<td></td>
<td>Green</td>
<td></td>
</tr>
</tbody>
</table>
重要
您必须调用 setSyncRowsWithHeading(true)
和 setHeading([...])
在通过 addRow([...])
添加任何行之前,其中发生列的重新排列。
使用数组作为 generate()
的输入会产生相同的结果
<?php
$data = [
[
'color' => 'Blue',
'name' => 'Fred',
'size' => 'Small',
],
[
'size' => 'Large',
'age' => '24',
'name' => 'Mary',
],
[
'color' => 'Green',
],
];
$table = new \CodeIgniter\View\Table();
$table->setHeading(['name' => 'Name', 'color' => 'Color', 'size' => 'Size'])
->setSyncRowsWithHeading(true);
echo $table->generate($data);
类参考
- class CodeIgniter\View\Table
- $function = null
允许您指定一个原生 PHP 函数或一个有效的函数数组对象,应用于所有单元格数据。
<?php $table = new \CodeIgniter\View\Table(); $table->setHeading('Name', 'Color', 'Size'); $table->addRow('Fred', '<strong>Blue</strong>', 'Small'); $table->function = 'htmlspecialchars'; echo $table->generate();
在上面的例子中,所有单元格数据都会通过 PHP 的
htmlspecialchars()
函数,最终得到<td>Fred</td><td><strong>Blue</strong></td><td>Small</td>
- generate([$tableData = null])
- 参数:
$tableData (
mixed
) – 用于填充表格行的數據
- 返回值:
HTML 表格
- 返回类型:
string
返回一个包含生成的表格的字符串。接受一个可选参数,可以是数组或数据库结果对象。
- setCaption($caption)
- 参数:
$caption (
string
) – 表格标题
- 返回值:
表格实例(方法链)
- 返回类型:
允许您为表格添加标题。
<?php $table->setCaption('Colors');
- setHeading([$args = [][, ...]])
- 参数:
$args (
mixed
) – 包含表格列标题的数组或多个字符串
- 返回值:
表格实例(方法链)
- 返回类型:
允许您设置表格标题。您可以提交数组或独立参数
<?php $table->setHeading('Name', 'Color', 'Size'); // or $table->setHeading(['Name', 'Color', 'Size']);
- setFooting([$args = [][, ...]])
- 参数:
$args (
mixed
) – 包含表格页脚值的数组或多个字符串
- 返回值:
表格实例(方法链)
- 返回类型:
允许您设置表格页脚。您可以提交数组或离散参数
<?php $table->setFooting('Subtotal', $subtotal, $notes); // or $table->setFooting(['Subtotal', $subtotal, $notes]);
- addRow([$args = [][, ...]])
- 参数:
$args (
mixed
) – 包含行值的数组或多个字符串
- 返回值:
表格实例(方法链)
- 返回类型:
允许您向表格添加一行。您可以提交数组或离散参数
<?php $table->addRow('Blue', 'Red', 'Green'); // or $table->addRow(['Blue', 'Red', 'Green']);
如果您想设置单个单元格的标签属性,您可以为该单元格使用关联数组。关联键data定义单元格的数据。任何其他键 => val 对将作为 key=’val’ 属性添加到标签中
<?php $cell = ['data' => 'Blue', 'class' => 'highlight', 'colspan' => 2]; $table->addRow($cell, 'Red', 'Green'); ?> <!-- Generates: --> <td class='highlight' colspan='2'>Blue</td><td>Red</td><td>Green</td>
- makeColumns([$array = [][, $columnLimit = 0]])
- 参数:
$array (
array
) – 包含多行数据的数组$columnLimit (
int
) – 表格中列的数量
- 返回值:
HTML 表格列的数组
- 返回类型:
array
此方法将一维数组作为输入,并创建一个多维数组,其深度等于所需的列数。这允许将具有许多元素的单个数组显示在具有固定列数的表格中。请考虑以下示例
<?php $list = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve']; $newList = $table->makeColumns($list, 3); $table->generate($newList); ?> <!-- Generates a table with this prototype: --> <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>
- setTemplate($template)
- 参数:
$template (
array
) – 包含模板值的关联数组
- 返回值:
成功时为 true,失败时为 false
- 返回类型:
bool
允许您设置模板。您可以提交完整的模板或部分模板。
<?php $template = [ 'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">', ]; $table->setTemplate($template);
- setEmpty($value)
- 参数:
$value (
mixed
) – 要放在空单元格中的值
- 返回值:
表格实例(方法链)
- 返回类型:
允许您设置一个默认值,用于任何为空的表格单元格。例如,您可以设置一个不间断空格
<?php $table->setEmpty(' ');
- clear()
- 返回值:
表格实例(方法链)
- 返回类型:
允许您清除表格标题、行数据和标题。如果您需要显示多个具有不同数据的表格,您应该在生成每个表格后调用此方法以清除之前的表格信息。
示例
<?php $table = new \CodeIgniter\View\Table(); $table->setCaption('Preferences') ->setHeading('Name', 'Color', 'Size') ->addRow('Fred', 'Blue', 'Small') ->addRow('Mary', 'Red', 'Large') ->addRow('John', 'Green', 'Medium'); echo $table->generate(); $table->clear(); $table->setCaption('Shipping') ->setHeading('Name', 'Day', 'Delivery') ->addRow('Fred', 'Wednesday', 'Express') ->addRow('Mary', 'Monday', 'Air') ->addRow('John', 'Saturday', 'Overnight'); echo $table->generate();