<?php
/*
** Name: Table OO Interface
** Has 2 classes 'html_table' and 'html_table_pretty'
** Description: Automatic generation of HTML for table.
- Colspan, rowspan, table style, cell style, and data style may all be defined.
- OO interface
- Simple but effective
** History: This class is written by Herman Veluwenkamp
** email: hermanv@mindless.com
** and is available at -
** http://phpclasses.upperdesign.com/browse.html/package/21
*/
// Generic HTML Table class
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 <SPAN> tag.
var $col_style = array(); // default style for table column. enclosed in <TD> tags.
var $col_cell_style = array(); // default style for column cells. enclosed in <SPAN> tags.
var $col_email_href = array(); // 1 for email links, 2 for href links
var $cell_style = ''; // default cell style. enclosed in <TD> tags.
var $cell_form = 'N'; // Put <form> tags enclosing the <TD> tags? Default is "no"
var $table_style = ''; // default table style. enclosed in <TABLE> tags.
// Private variables
var $_tdtag;
function cell_init()
{
return array(
'content' => $this->cell_content,
'style' => '',
'cell_style'=> '');
}
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 '.$this->table_style.'>'."\n";
for ($row = 1; $row <= $this->rows; $row++)
{
$this->html .= ' <TR>'."\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.
// Should we put <form> tags surrounding the <td> tags ??
if ($this->cell[$row][$col]['cell_form'] == 'N')
$this->_tdtag = ' <TD ';
else
$this->_tdtag = ' <form><TD ';
// otherwise draw cell with style...
if (!empty($this->cell[$row][$col]['cell_style']))
$this->html .= $this->_tdtag . $this->cell[$row][$col]['cell_style'] . ' ' . $extra.'>';
else
if (!empty($this->col_style[$col]))
$this->html .= $this->_tdtag . $this->col_style[$col] .' '. $extra.'>';
else
$this->html .= $this->_tdtag . $this->cell_style .' '. $extra.'>';
// draw content of cell with style...
if (!empty($this->cell[$row][$col]['style']))
$this->html .= '<SPAN '.$this->cell[$row][$col]['style'].'>';
else
if (!empty($this->col_cell_style[$col]))
$this->html .= '<SPAN '.$this->col_cell_style[$col].'>';
else
if (!empty($this->content_style))
$this->html .= '<SPAN '.$this->content_style.'>';
// If the contents are email links or href links
if ($row == 1) // is a top Title Header line - do not print email links
{
$this->html .= $this->cell[$row][$col]['content'];
}
else
if ($this->cell[$row][$col]['content'] == " ") // for netscape background is black
{
$this->html .= $this->cell[$row][$col]['content'];
}
else
{
if ($this->col_email_href[$col] == 1) // if the column is email links
{
$this->html .= '<a href="mailto:' . $this->cell[$row][$col]['content'] . '">'
. $this->cell[$row][$col]['content'] . '</a>';
}
else
if ($this->col_email_href[$col] == 2) // if the column is a href links
{
$this->html .= '<a href="' . $this->cell[$row][$col]['content'] . '">'
. $this->cell[$row][$col]['content'] . '</a>';
}
else
$this->html .= $this->cell[$row][$col]['content'];
}
if (!empty($this->cell[$row][$col]['style']) or !empty($this->col_cell_style[$col]) or !empty($this->content_style))
$this->html .= '</SPAN>';
if ($this->cell[$row][$col]['cell_form'] == 'N')
$this->_tdtag = ' </TD> ';
else
$this->_tdtag = ' </TD></form> ';
$this->html .= $this->_tdtag . "\n";
}
$this->html .= ' </TR>'."\n";
}
$this->html .= '</TABLE>'."\n";
}
function display()
{
if (empty($this->html)) $this->code();
print $this->html;
}
} // end of class html_table.
class html_table_pretty extends html_table
{
var $background = '';
var $border_width = '';
var $border_color = '';
var $html_pretty = '';
function code_pretty()
{
$this->code();
$border_style = '';
if (!empty($this->border_width))
$border_style .= ' CELLSPACING="0" CELLPADDING="0" BORDER="'.$this->border_width.'"';
if (!empty($this->border_color))
$border_style .= ' BORDERCOLOR="'.$this->border_color.'"';
$this->html_pretty = '<TABLE'.$border_style.'><TR><TD '.$this->background.'>'."\n";
$this->html_pretty .= $this->html;
$this->html_pretty .='</TD></TR></TABLE>'."\n";
}
function display_pretty()
{
if (empty($this->html_pretty))
$this->code_pretty();
print $this->html_pretty;
}
} // end of class html_table_pretty
php?>
|