<?php
/**
* Classe sTable
*/
// **********************************************************
// Classe sTable
// **********************************************************
/**
* Questa classe implementa un oggetto sTable
*
* In questo esempio viene mostrato come implementare un oggetto sTable.
*
* <code>
* // creazione dei dati
* $titoli = array("Cognome", "Nome", "Indirizzo");
* $campi[0] = array("Pippo", "Disney", "Roma");
* $campi[1] = array("Pluto", "Disney", "Milano");
* $campi[2] = array("Minnie", "Disney", "Napoli");
*
* // creazione dei dati da database mySql
* $conn = new sConnection("localhost", "login", "password");
* $conn->setDb("database");
* $conn->getQuery("select * from tabella");
*
* $titoli = $conn->getTitle();
* $campi = $conn->getData();
*
* // creazione della tabella
* $mytable = new sTable("Esempio");
* $mytable->addThead($titoli);
* $mytable->addBody($campi);
*
* $mypage->addObj($mytable); // per aggiungere la tabella alla pagina HTML
* ...
* echo $mytable; // stampa l'HTML della tabella
* </code>
*
* @author Dario Mazzeo <hide@address.com>
* @version 1.0.0
* @copyright Freesoftware Italia - www.freesoftwareitalia.it
* @package sClassHTML
*/
class sTable extends sClassHTML{
protected $caption;
protected $blackclr="#F0F0F0";
protected $whiteclr="#FFFFFF";
private $use_class_style=false;
private $html_thead="";
private $html_body="";
protected $num_rows=0;
/**
* Creazione dell'oggetto sTable
*
* La classe sTable colora in automatico le righe della tabella per una
* migliore visualizzazione. La colorazione può avvenire in due modi differenti:
* utilizzando lo stile o la classe.
*
* Esempio:
*
* <code>
* $mytable=new sTable("Esempio");
* // output HTML delle righe
* // <tr style='{background-color: rgb(240 240 240);}'>...</tr>
* // ...
* // <tr style='{background-color: rgb(255 255 255);}'>...</tr>
*
* $mytable=new sTable("Esempio", "tab", true);
* // output HTML delle righe
* // <tr class='tab_black'>...</tr>
* // ...
* // <tr class='tab_white'>...</tr>
* // ...
* </code>
*
* @param string $caption Titolo della tabella
* @param string $classe Nome della classe CSS
* @param bool $use_class_style Se false, colora le righe della tabella con lo style
*/
public function __construct($caption="", $classe="css_table", $use_class_style=false){
$this->caption=$caption;
$this->classe=$classe;
$this->use_class_style=$use_class_style;
}
/**
* Aggiunta dei titoli tabella
*
* Esempio:
*
* <code>
* $mytable->addThead($titoli);
* </code>
*
* @param string[] &$title Impostare un array di titoli
* @return null
*/
public function addThead(&$title){
$this->html_thead.="\r\n<thead>\r\n<tr>";
foreach ($title as $i => $val){
$this->html_thead.="\r\n<th>".$val."</th>";
}
$this->html_thead.="\r\n</tr>\r\n</thead>";
}
/**
* Aggiunta dei campi tabella
*
* Esempio:
*
* <code>
* $mytable->addBody($campi); // converte il contenuto in HTML
* ...
* $mytable->addBody($campi, false); // non converte il contenuto in HTML
* </code>
*
* @param string[] &$field Impostare un array di dati
* @param bool $conversion Converte il contenuto dei dati in HTML
* @return null
*/
public function addBody(&$field, $conversion=true){
$this->num_rows=count($field);
$this->conversion=$conversion;
$this->html_body.="\r\n<tbody>";
$icolor=0;
$mycolor=$this->whiteclr;
for ($y=0; $y<count($field); $y++){
if ($this->use_class_style){
($icolor++%2==0) ? $mycolor=$this->classe.'_black' : $mycolor=$this->classe.'_white';
$this->html_body.="\r\n<tr class='".$mycolor."'>";
}
else{
($icolor++%2==0) ? $mycolor=$this->blackclr : $mycolor=$this->whiteclr;
$this->html_body.="\r\n<tr style='{background-color: ".$mycolor.";}'>";
}
for ($x=0; $x<count($field[$y]); $x++) {
($this->conversion) ? $tmp=str_html($field[$y][$x]) : $tmp=$field[$y][$x];
$this->html_body.="\r\n<td>".$tmp."</td>";
}
$this->html_body.="\r\n</tr>";
}
$this->html_body.="\r\n</tbody>";
}
/**
* Questo metodo consente di visualizzare i dati in verticale anziché in orizzontale
*
* Esempio:
*
* <code>
* $cont=new sDiv();
* $conn=new sConnection('localhost', 'root', 'root');
* $conn->setDb('database');
* $conn->setQuery("SELECT * FROM utenti WHERE id=14");
*
* $table=new sTable("Dati personali");
* $titoli=array("Descrizione", "Valori");
* $table->addThead($titoli);
* $table->addBodyR($conn->getTitle(), $conn->getData());
* // addBodyR può essere usata solo se la query restituisce una sola riga
*
* $conn->closeDb();
* $cont->addObj($table);
* </code>
*
* @param string[] &$title Array di titoli
* @param string[][] &$field Array bidimensionale di dati
* @param bool $conversion Se true abilita la conversione in HTML
* @return null
*/
public function addBodyR(&$title, &$field, $conversion=true){
$this->num_rows=count($title);
for($i=0; $i<count($title); $i++){
$mydata[]=array($title[$i], $field[0][$i]);
}
$this->addBody($mydata, $conversion);
}
/**
* Impostazione dei colori della tabella
*
* E' possibile impostare, in alternanza, i colori RGB
* delle righe della tabella.
*
* Esempio:
*
* <code>
* $mytable->setColor("#F0F0F0", "#FFFFFF");
* </code>
*
* @param string $black Imposta il colore scuro della riga
* @param string $white Imposta il colore chiaro della riga
* @return null
*/
public function setColor($black, $white){
$this->whiteclr=$white;
$this->blackclr=$black;
}
/**
* Questo metodo consente l'aggiunta di una stringa all'interno del tag form
*
* E' possibile aggiungere una stringa all'interno del tag HTML <table>.
*
* Esempio:
*
* <code>
* $mytable->setTag("border='1'");
* </code>
*
* @param string $tag Imposta la stringa da aggingere
* @return null
*/
public function setTag($tag){
$this->tag=" ".$tag;
}
/**
* Questo metodo restituisce il numero di righe della tabella
*
* Esempio:
*
* <code>
* $tabella = new sTable("titolo tabella");
* $tabella->addThead(...);
* $tabella->addBody(...);
* echo $tabella->getHtml();
*
* echo "Numero di voci: ".$tabella->getNumRows();
* </code>
*
* @return int Numero di righe della tabella
*/
public function getNumRows(){
return $this->num_rows;
}
/**
* Questo metodo ritorna il livello di incapsulamento
*
* @return int
*/
public function getZindex(){
return 2;
}
/**
* Questo metodo elabora l'HTML dell'oggetto
*
* @return null
*/
protected function elaboraHtml(){
if ($this->classe!="") $myclasse=" class='".$this->classe."'";
$this->html="\r\n<table".$myclasse.$this->tag.">\r\n<caption>".
$this->caption."</caption>".$this->html_thead.$this->html_body.
"\r\n</table>";
}
/**
* Questo metodo restituisce l'equivalente html dell'oggetto creato
*
* Esempio:
*
* <code>
* echo $contenitore;
* </code>
*
* @return string Ritorna la stringa HTML
*/
public function __toString(){
$this->elaboraHtml();
return parent::__toString();
}
/**
* Questo metodo restituisce l'equivalente html dell'oggetto creato
*
* Esempio:
*
* <code>
* echo $contenitore->getHtml();
* </code>
*
* @return string Ritorna la stringa HTML
*/
public function getHtml(){
$this->elaboraHtml();
return parent::getHtml();
}
}
?>