Zend - The PHP Company




Tables

Add Code


DynTable 0.1  

Type: class
Added by: massimilianowosz
Entered: 14/11/2006
Last modified: 02/11/2005
Rating: - (fewer than 3 votes)
Views: 7382
This class create a ajax-driven dynamic table. Data are retrieved fron an SQLite database and updated on-the-fly as the user changes them. Full package downloadable here http://www.evolvetechnologies.it/duepuntozero/esempi/dyntable_sqlite.zip


<?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";
        }
                
    }
?>


Usage Example


See the example


Rate This Script





Search



This Category All Categories