Mega Code Archive

 
Categories / Php / HTML
 

Automatic generation of HTML code for a table. OO interface

Can define colspan, rowspan, table style, cell style, and data style <html> <head> <title>Table</title> <style type="text/css"> .header { background: yellow; text-align: center; } </style> </head> <body> <? 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 $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 <TD> tags. 'style'=>$this->content_style, // if this is defined and not empty then "content" (defined above) // is encapsulated by a <SPAN STYLE='style'> tag. 'cell_style'=>$this->cell_style); // if this is defined and not empty then the <TD> 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 '.$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. // otherwise draw cell with style... if (!empty($this->cell[$row][$col]['cell_style'])) $this->html .= '<TD '.$this->cell[$row][$col]['cell_style'].' '.$extra.'>'; else $this->html .= '<TD '.$this->cell_style.' '.$extra.'>'; // draw content of cell with style... if (!empty($this->cell[$row][$col]['style'])) $this->html .= '<SPAN STYLE="'.$this->cell[$row][$col]['style'].'">'; else if (!empty($this->content_style)) $this->html .= '<SPAN STYLE="'.$this->content_style.'">'; $this->html .= $this->cell[$row][$col]['content']; if (!empty($this->cell[$row][$col]['style']) or !empty($this->content_style)) $this->html .= '</SPAN>'; $this->html .= '</TD>'."\n"; } $this->html .= '</TR>'."\n"; } $this->html .= '</TABLE>'."\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(); ?> </body> </html>