PX : code

HTML Table by Herman Veluwenkamp
Download this code


<?
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 $cell_style = ''; //  default cell style. enclosed in <TD> tags.
  var $table_style = ''; // default table style. enclosed in <TABLE> tags.
  
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.
            
            // otherwise draw cell with style...
            if (!empty($this->cell[$row][$col]['cell_style'])) 
                $this->html .= '    <TD '.$this->cell[$row][$col]['cell_style'].' '.$extra.'>';
      else if (!empty($this->col_style[$col]))  
        $this->html .= '    <TD '.$this->col_style[$col].' '.$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 '.$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.'>';
            
            $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>';
            
            $this->html .= '</TD>'."\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.

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.