Login   Register  
PHP Classes
elePHPant
Icontem

File: table.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of al dev  >  db_table  >  table.php  >  Download  
File: table.php
Role: ???
Content type: text/plain
Description: HTML table generation program
Class: db_table
Author: By
Last change:
Date: 2001-07-11 14:22
Size: 6,953 bytes
 

Contents

Class file image Download
<?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 = '&nbsp;'; //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'] == "&nbsp;")  // 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?>