<?php
//////// sample array to pass to class //////////
/*
$stuff = array("0" => array(
"product_id" => "00001",
"actual_unit_cost" => "99.99",
"retail_unit_cost" => "124.99",
"quantity" => "5"
),
"1" => array(
"product_id" => "00002",
"actual_unit_cost" => "699.99",
"retail_unit_cost" => "750.00",
"quantity" => "3"
)
);
*/
class display {
var $widths = array();
var $biggest = array();
var $data = array();
var $dis;
var $divider;
var $rows;
var $emptyset=FALSE;
var $write; //echo the output
var $ascii_output;
var $finalhtmltable;
var $stylesheet;
var $borderwidth = 0;
var $bordercolor = "#000000";
var $cellpadding = 2;
var $cellspacing = 1;
function calculate_widths($array){
if(empty($array)){
//check that there is some data to display
$this->emptyset=TRUE;
return(false);
}
//loop through each row
$this->data = $array;
$x=0;
if(is_array($array)){
foreach($array as $a){
while(list($key, $val) = each($a)){
$this->widths[$x][$key] = strlen($val);
}
++$x;
}
}
$this->biggest = $this->get_longest_only();
return($this->widths);
}
function get_longest_only(){
$x=0;
$array = $this->widths;
foreach($array as $a){
while(list($key, $val) = each($a)){
if($val > $this->biggest[$key] || empty($this->biggest[$key])){
$this->biggest[$key] = $val;
}
if(strlen($key) > $this->biggest[$key]){
$this->biggest[$key] = strlen($key);
}
}
++$x;
}
return($this->biggest);
}
function make_layout($write=1){
$this->write = $write;
if($this->emptyset){
return("Empty set (0.00 hehehe)\n");
}
$first="+";
while(list($key, $val) = each($this->biggest)){
$dis.="+";
for($x=0;$x<$this->biggest[$key];$x++){
$first .= "-";
}
$first.="+";
$s="|".ucwords(str_replace("_", " ",$key));
if(strlen($s)<= $this->biggest[$key]){
for($x=strlen($s);$x<=$this->biggest[$key];$x++){
$s.=" ";
}
}
$second.=$s;
}
$this->divider = $first;
$re = $first."\n".$second."|\n".$first."\n";
$re.=$rows;
$this->rows = $this->make_body();
$re.=$this->rows;
if($this->write){
//write the output to the webpage
//echo "<pre>".$re."</pre>";
echo "".$re."";
}
$this->ascii_out = $re;
return($re);
}
function create_stylesheet($bg="ededed", $fontcol="000000", $fontsize="x-small", $bg2="444444", $fontcol2="ffffff", $fontsize2="x-small"){
$this->stylesheet = "
<STYLE type='text/css'>
<!--
.column-data { background:$bg; color:$fontcol; font-size:$fontsize; }
.table-header { background:$bg2; color:$fontcol2; font-weight:bold; text-align:center; font-size:$fontsize2 }
//-->
</style>";
}
function make_body(){
if(is_array($this->data)){
foreach($this->data as $row){
while(list($key, $val)=each($row)){
if(is_array($val)){
$out[0]=$val;
$tr = new display($out);
$tr->make_layout(0);
$tr->set_borderwidth($this->borderwidth);
$tr->set_cellpadding($this->cellpadding);
$tr->set_cellspacing($this->cellspacing);
$tr->set_bordercolor($this->bordercolor);
$val = "<Table><TR><TD> ".$tr->make_html_table()."</TD></tR></tAble>";
}
$r .= "|".$val;
if(strlen($val)<= $this->biggest[$key]){
for($x=strlen($val);$x < $this->biggest[$key]; $x++){
$r.=" ";
}
}
}
$r.="|\n";
}
}
$r.=$this->divider."\n";
return($r);
}
function get_divider(){
return($this->divider);
}
function display($stuff){
//constructor function
$this->widths = $this->calculate_widths($stuff);
}
function set_borderwidth($wid){
$this->borderwidth = $wid;
}
function set_cellpadding($pad){
$this->cellpadding=$pad;
}
function set_cellspacing($spac){
$this->cellspacing=$spac;
}
function set_bordercolor($col){
$this->bordercolor=$col;
}
function make_html_table(){
//converts ascii display into a proper html table
$text = $this->ascii_out;
$rows = explode("\n", $text);
$x=0;
foreach($rows as $row){
$last = strlen($row);
$class = "column-data";
if($x==1){
$class = "table-header";
}
if(!ereg("^\+\-*", $row) && strlen($row)>0){
$row = "<TR>\n <td class='$class' align='center' valign='middle'>".$row;
$row .= "</td>\n</TR>\n";
$row = str_replace("+", "</td><td class='$class' align='center'>", $row);
$row = str_replace("|", "</td><td class='$class' align='center'>", $row);
$row = str_replace("<td class='$class' align='center'></td>", "", $row); //remove any blanks
$row = str_replace("<td class='$class' align='center' valign='middle'></td>", "", $row); //remove any blanks
$htmloutput.=$row;
}
$x++;
}
$style = $this->stylesheet;
$htmloutput = $style."\n<TABLE border='".$this->borderwidth."' bordercolor='".$this->bordercolor."' cellpadding='".$this->cellpadding."' cellspacing='".$this->cellspacing."'>\n ".$htmloutput."\n</TABLE>";
$this->finalhtmltable = $htmloutput;
return($htmloutput);
}
function returnhtml(){
return($this->finalhtmltable);
}
function parsehtml(){
echo $this->finalhtmltable;
}
}
//$t = new display($stuff);
//$t->make_layout(0);
//echo $t->make_html_table();
/*
$d = new display($stuff);
$d->make_layout(0);
$d->set_borderwidth(0);
$d->set_cellspacing(1);
$d->set_cellpadding(2);
$d->make_html_table();
$d->parsehtml();
*/
?>
|