Location: PHPKode > scripts > sClassHTML > sclasshtml/library/sTable.class.php
<?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();
  }
}
?>
Return current item: sClassHTML