Automatic generation of HTML code for a table. OO interface
Can define colspan, rowspan, table style, cell style, and data style
Table
class html_table {
var $cols = 0;
var $rows = 0;
var $cell = array();
var $html = '';
var $cell_content = ' '; //default cell content.
var $content_style = ''; //default content style. content is surrounded by tag.
var $cell_style = ''; //default cell style
0 var $table_style = ''; //default table style.
function cell_init() {
return array(
'content'=>$this->cell_content, // data to be inserted between tags.
'style'=>$this->content_style, // if this is defined and not empty then "content" (defined above)
// is encapsulated by a tag.
'cell_style'=>$this->cell_style); // if this is defined and not empty then the | tag that encapsulates
// "content" has its "$cell_style" replaced by this variable.
}
function init($parameters) {
if (isset($parameters['cols'])) $this->cols = $parameters['cols'];
if (isset($parameters['rows']))$this->rows = $parameters['rows'];
for ($row = 1; $row <= $this->rows; $row++) {
for ($col = 1; $col <= $this->cols; $col++) {
$this->cell[$row][$col] = $this->cell_init();
}
}
}
function add_rows($num_rows) {
for ($row = 1; $row <= $num_rows; $row++) {
for ($col = 1; $col <= $this->cols; $col++) {
$this->cell[$row + $this->rows][$col] = $this->cell_init();
}
}
$this->rows += $num_rows;
}
function add_cols($num_cols) {
for ($row = 1; $row <= $this->rows; $row++) {
for ($col = 1; $col <= $num_cols; $col++) {
$this->cell[$row][$col+$this->cols] = $this->cell_init();
}
}
$this->cols += $num_cols;
}
function code() {
if (!empty($this->html)) return 1;
$this->html = 'table_style.'>'."\n";
for ($row = 1; $row <= $this->rows; $row++) {
$this->html .= ''."\n";
for ($col = 1; $col <= $this->cols; $col++) {
$extra = '';
//check if "colspan" defined. if so then hide cells that get merged.
if (isset($this->cell[$row][$col]['colspan'])) {
$extra .= 'COLSPAN="'.$this->cell[$row][$col]['colspan'].'"';
for ($hidden_col = 1; $hidden_col < $this->cell[$row][$col]['colspan']; $hidden_col++) {
$this->cell[$row][$col+$hidden_col]["hide"] = true;
//check if "rowspan" defined. if so then propogate "colspan" into merged rows.
if (isset($this->cell[$row][$col]["rowspan"])) {
for ($hidden_row = 1; $hidden_row < $this->cell[$row][$col]['rowspan']; $hidden_row++) {
$this->cell[$row+$hidden_row][$col]["colspan"] = $this->cell[$row][$col]['colspan'];
}
}
}
}
//check if "rowspan" defined. if so then hide cells that get merged.
if (isset($this->cell[$row][$col]["rowspan"])) {
$extra .= 'ROWSPAN="'.$this->cell[$row][$col]['rowspan'].'"';
for ($hidden_row = 1; $hidden_row < $this->cell[$row][$col]['rowspan']; $hidden_row++) {
$this->cell[$row+$hidden_row][$col]["hide"] = true;
}
}
// code to draw cell html...
if (isset($this->cell[$row][$col]['hide'])) continue; // if hide then skip this cell.
// otherwise draw cell with style...
if (!empty($this->cell[$row][$col]['cell_style']))
$this->html .= 'cell[$row][$col]['cell_style'].' '.$extra.'>';
else
$this->html .= ' | cell_style.' '.$extra.'>';
// draw content of cell with style...
if (!empty($this->cell[$row][$col]['style'])) $this->html .= '';
else if (!empty($this->content_style)) $this->html .= '';
$this->html .= $this->cell[$row][$col]['content'];
if (!empty($this->cell[$row][$col]['style']) or !empty($this->content_style)) $this->html .= '';
$this->html .= ' | '."\n";
}
$this->html .= ' '."\n";
}
$this->html .= ' '."\n";
}
function display() {
print $this->html;
}
}
/*
example below...
*/
$data = new html_table;
// define table size.
$data->init(array("cols"=>3, "rows"=>"3"));
// default styles.
$data->table_style = 'BORDER="1" CELLPADDING="2" CELLSPACING="2"';
$data->cell_style = 'WIDTH="100" ALIGN="center" BGCOLOR="white"';
$data->content_style = 'font: bold 9pt monospace;';
// define table content.
$data->cell[1][1]["content"]="apple";
$data->cell[2][2]["content"]="orange";
$data->cell[2][3]["content"]="pear";
$data->cell[3][1]["content"]="plum";
$data->cell[2][1]["content"]="grape";
$data->cell[1][1]["colspan"]=3;
$data->cell[2][3]["rowspan"]=2;
$data->cell[3][1]["colspan"]=2;
// define fancy styles for individual cells.
$data->cell[2][2]["style"] ='font: 18pt monospace;';
$data->cell[2][3]["style"] ='background: red';
$data->cell[1][1]["style"] ='color: red; font: italic 18pt sans-serif;';
$data->cell[3][1]["style"] ='color: white; font: bold 18pt serif;';
$data->cell[1][1]["cell_style"] = 'CLASS="header"';
$data->cell[3][1]["cell_style"] = 'ALIGN="right" bgcolor="blue"';
// code and display.
$data->code();
$data->display();
?>
|