HTML_Table offers an interface for create a HTML table. You can work with the table like a spreadsheet. Instead of working with HTML code and linear adding of cells, you can address and fill cells independend of there position. There is no different, whether you start with fill a cell at the beginning, in the middle or at the end of the table, a row or a column.
Normaly, you would define a table with a constant number of rows and columns. But sometimes, you does not know, how many rows or columns you need: ie. transforming user input or the result of a database query to an HTML table.
In this case, you should enable the autoGrow feature. In this mode, HTML_Table adds new rows or columns automatically, if you use a cell address located in a not existing row or column.
If you create a table of data, sometimes you have not to fill all cells with different values. Perhaps you do not know the value for a cell, or you want to insert a default value - ie. retrieving data about users. Not every user has a mobile, a email address etc., in this case, an "n/a" should be inserted into that specific cell.
So, simply define "n/a" as autoFill value and fill only the cells where data exist. You need not to fill every cell; unfilled cells contain automatically an "n/a".
Our HTML table to create should contain the following data:
$data = array( '0' => array("Bakken", "Stig", "", "stig@example.com"), '1' => array("Merz", "Alexander", "alex.example.com", "alex@example.com"), '2' => array("Daniel", "Adam", "", "") ); |
Let us now start by creating a new instance of HTML_Table. The table should be 600 pixel wide. We do not know the quantity of the data to insert into the table - so we enable the autoGrow feature. Unfilled cells should contain an "n/a".
require_once "HTML/Table.php"; $tableAttrs = array("width" => "600"); $table = new HTML_Table($tableAttrs); $table -> setAutoGrow(true); $table -> setAutoFill("n/a"); |
Now process every data entry. Here we use also the alternate feature of HTML_Table. Every second row will be colored red.
for($nr = 0; $nr < count($data); $nr++) { $table -> setHeaderContents( $nr+1, 0, (string)$nr); for($i = 0; $i < 4; $i++) { if("" != $data[$nr][$i]) $table -> setCellContents( $nr+1, $i+1, $data[$nr][$i]); } } $altRow = array("bgcolor"=>"red"); $table -> altRowAttributes(1, null, $altRow); |
Now we want to define the cells in the first row and column as header cells. It should looks like a spreadsheet application, so we want to use the color "silver" as the background colour for each header cell. The first row contains a column headline, the first column the number of the data set row.
$table -> setHeaderContents(0, 0, ""); $table -> setHeaderContents(0, 1, "Surname"); $table -> setHeaderContents(0, 2, "Name"); $table -> setHeaderContents(0, 3, "Website"); $table -> setHeaderContents(0, 1, "EMail"); $hrAttrs = array("bgcolor" => "silver"); $table -> setRowAttributes(0, $hrAttrs, true); $table -> setColAttributes(0, $hrAttrs); |
It is done! Our table is finished, now we can output the table as HTML code.
echo $table->toHTML(); |
<!-- BEGIN TABLE LEVEL: 0 --> <table width="600"> <tr> <th bgcolor="silver"> </th> <th bgcolor="silver">Surname</th> <th bgcolor="silver">Name</th> <th bgcolor="silver">Website</th> <th bgcolor="silver">EMail</th> </tr> <tr> <th bgcolor="silver">0</th> <td>Bakken</td> <td>Stig</td> <td>n/a</td> <td>stig@example.com</td> </tr> <tr> <th bgcolor="silver">1</th> <td bgcolor="red">Merz</td> <td bgcolor="red">Alexander</td> <td bgcolor="red">alex.example.com</td> <td bgcolor="red">alex@example.com</td> </tr> <tr> <th bgcolor="silver">2</th> <td>Daniel</td> <td>Adam</td> <td>n/a</td> <td>n/a</td> </tr> </table> <!-- END TABLE LEVEL: 0 --> |