<?php
class dyntable
{
var $fixed_width; //Variabile booleana che indica se la larghezza della tabella � fissa
var $table_code; //Il codice html della tabella generato
var $headers = array(); //Array contenente le testate delle colonne
var $rows = array(); //Array contenente le righe della tabella
var $actions = array(); //Array contenente le azioni delle celle
var $col_align = array(); //Array contenente gli allineamenti delle celle
var $num_cols; //Numero delle colonne della tabella
var $col_width = array(); //Array contenente la larghezza per ciascuna colonna
var $default_width = 30; //Larghezza di default delle colonne
var $editable; //Variabile booleana che indica se le celle dalla tabella sono modificabili
var $print_row_number; //Variabile booleana che indica se stampare i numeri di riga
var $row_height = 17; //Altezza delle righe
var $row_wrap = true; //Variabile booleana che indica se il testo puo andare a capo
var $number_column_width = 14; //Larghezza della colonna dei numeri di riga
function dyntable($num_cols,$col_width=array(),$print_row_number=false,$fixed_width=true,$editable=false)
{
//scrivo il numero di colonne della tabella
$this->num_cols = $num_cols;
//se ricevo la larghezza di ciascuna colonna la scrivo
if($col_width)
$this->col_width = $col_width;
//altrimenti setto tutte le colonne alla larghezza di default
else
{
for($i = 0; $i < $this->num_cols; $i++)
array_push($this->col_width,$this->default_width);
}
//Scrivo se la tabella deve avere lunghezza fissa o no
$this->fixed_width = $fixed_width;
//Scrivo se le celle della tabella sono modificabili
$this->editable = $editable;
//Scrivo se stampare i numeri di riga
$this->print_row_number = $print_row_number;
}
function add_headers($headers_array = array())
{
//Se ricevo i valori da inserire nella testata li scrivo
if($headers_array)
$this->headers = $headers_array;
//altrimenti inserisco una testata vuota
else
{
for($i = 0; $i < $this->num_cols; $i++)
array_push($this->headers,"");
}
}
function add_row($values_array = array(),$action_array = array())
{
//Se ricevo i valori da inserire nella riga li scrivo
if($values_array)
array_push($this->rows,$values_array);
//altrimenti inserisco una riga vuota
else
{
for($i = 0; $i < $this->num_cols; $i++)
array_push($this->rows,"");
}
if($action_array)
array_push($this->actions,$action_array);
}
function create()
{
/************************************************
TESTATA DELLA TABELLA
************************************************/
echo "<div class="row">n";
//se devo stampare i numeri di riga aggiungo una colonna
if($this->print_row_number)
{
echo "<div nowrap="nowrap" class="head" id="head_0" style="width:".$this->number_column_width."px;"></div>n";
echo "<div nowrap="nowrap" class="drag" id="drag_0" onMouseDown="start_resize(this)"></div>n";
}
//stampo tutte le testate tranne l'ultima ed inserisco il separatore per ridimensionare
for($i = 1; $i < $this->num_cols; $i++)
{
$width = $this->col_width[$i-1];
$testo = $this->headers[$i-1];
echo "<div nowrap="nowrap" class="head" id="head_$i" style="width:".$width."px;">$testo</div>n";
echo "<div nowrap="nowrap" class="drag" id="drag_$i" onMouseDown="start_resize(this)"></div>n";
}
$testo = $this->headers[$i-1];
$width = $this->col_width[$i-1];
//stampo l'ultima colonna senza sepatatore in fondo
echo "<div nowrap="nowrap" class="head" id="head_$i" style="width:".$width."px;">$testo</div>n";
echo "</div>n";
/************************************************
CORPO DELLA TABELLA
************************************************/
$num = 1;
foreach ($this->rows as $row)
{
echo "<div class="row">n";
//se devo stampare i numeri di riga aggiungo una colonna
if($this->print_row_number)
{
echo "<div nowrap="nowrap" class="col0"style="text-align:right;width:".$this->number_column_width."px;">$num</div>n";
echo "<div nowrap="nowrap" class="sep"></div>n";
}
$array_azioni = $this->actions[$num-1];
//stampo tutte le colonne tranne l'ultima ed inserisco il separatore
for($i = 1; $i < $this->num_cols; $i++)
{
$testo = $row[$i-1];
$width = $this->col_width[$i-1];
$azione = $array_azioni[$i-1];
if($this->editable)
$edit = " ondblclick="edit(this,'$azione')"";
echo "<div class="col$i" style="width:".$width."px;"$edit>$testo</div>n";
echo "<div nowrap="nowrap" class="sep"></div>n";
}
$testo = $row[$i-1];
$width = $this->col_width[$i-1];
$azione = $array_azioni[$i-1];
if($this->editable)
$edit = " ondblclick="edit(this,'$azione')"";
//stampo l'ultima colonna senza sepatatore in fondo
echo "<div class="col$i" style="width:".$width."px;"$edit>$testo</div>n";
echo "</div>n";
$num++;
}
}
function set_rows($row_height,$row_wrap=true)
{
$this->row_height = $row_height;
$this->row_wrap = $row_wrap;
}
function print_scripts()
{
echo "<script language="JavaScript" type="text/javascript" src="js/dyntable.js"></script>";
if($this->fixed_width)
echo "<script>nvar fixed_width = true;</script>n";
else
echo "<script>nvar fixed_width = false;n</script>n";
}
function set_align($array_align)
{
$this->col_align = $array_align;
}
function print_styles()
{
echo "<link href="css/dyntable.css" rel="stylesheet" type="text/css" />";
echo "<style>n";
if($this->print_row_number)
{
echo ".col0 {n";
echo "padding-top:3px;n";
echo "margin-top:-1px;n";
echo "float:left;n";
echo "border: 1px solid #E2E2E2;n";
echo "overflow:hidden;n";
echo "height:".$this->row_height."px;n";
echo "padding-left:5px;n";
echo "border-left: 0px solid #E2E2E2;n";
echo "border-right: 0px solid #E2E2E2;n";
echo "white-space: nowrap";
echo "}n";
}
for($i = 1; $i < $this->num_cols+1; $i++)
{
echo ".col$i {n";
echo "padding-top:3px;n";
echo "margin-top:-1px;n";
echo "float:left;n";
echo "border: 1px solid #E2E2E2;n";
echo "overflow:hidden;n";
echo "height:".$this->row_height."px;n";
echo "padding-left:5px;n";
echo "border-left: 0px solid #E2E2E2;n";
echo "border-right: 0px solid #E2E2E2;n";
if(!$this->row_wrap)
echo "white-space: nowrapn";
if($this->col_align)
{
$align = $this->col_align[$i-1];
echo "text-align:$alignn";
}
echo "}n";
}
echo ".sep {n";
echo "float:left;n";
echo "border: 0px solid #E2E2E2;n";
echo "height:".$this->row_height."px;n";
echo "width:3px;n";
echo "border-left:none;n";
echo "border-right:none;n";
echo "background-image:url(images/sep.gif);n";
echo "}n";
echo "</style>n";
}
} ?>
|
|