Affichage tableau avec template classe

Soyez le premier à donner votre avis sur cette source.

Vue 9 282 fois - Téléchargée 614 fois

Description

Ce script vous permettra d'afficher un tableau chargé en mémoire à l'avance.
Il y a plusieurs fonctions que vous pouvez explorer dans le fichier table.class.php ou directement dans la documentation fournie !
Avec ce script, vous n'aurez plus à taper <table><tr><td>... tout est automatique !

Compatible PHP4, PHP5
Vous devez obligatoirement mettre $null comme 4e paramètre si vous n'avez pas d'objet parent.
En PHP4, lorsque vous assignez l'objet à une variable et que vous voulez garder tous les liens des classes, il faut mettre la perluète &... ce qui donne
$obj =& new LSTable( 1, 1, '100', $other_table );
Normalement, si votre 4e paramètre est $null, il n'est pas nécessaire de sauvegarder le new LSTable avec la perluète.

Source / Exemple :


<?php
//////////////////////////////////////////////////////////////////////
// table.class.php
//--------------------------------------------------------------------
//
// Class Table - You can modify the define values
//
//--------------------------------------------------------------------
// Revision History
// v1.05	01 jan	2004	Jean-Sebastien Goupil - Adding check is_object when setText()
// v1.04	09 dec	2004	Jean-Sebastien Goupil - Correct ; after &nbsp;
// V1.03	23 sep	2004	Jean-Sebastien Goupil - Add Better Row,Col Span Function
// V1.02	26 aug	2004	Jean-Sebastien Goupil - Many Bugs Cor.
// V1.01	25 aug	2004	Jean-Sebastien Goupil - Error init Col
// V1.00	23 aug	2004	Jean-Sebastien Goupil
//--------------------------------------------------------------------
// Copyright (C) Jean-Sebastien Goupil
// http://other.lookstrike.com/
//--------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////
define( 'TABLE_DEFAULT_ROW_HIDDEN', FALSE );
define( 'TABLE_DEFAULT_COL_HIDDEN', FALSE );
define( 'TABLE_DEFAULT_CELL_VALUE', '&nbsp;' );	// If '&nbsp;', a cell will appear, if NULL, no cell will appear
define( 'TABLE_DEFAULT_TEMPLATE', 'tpl_LS' );

include( 'template.php' );
class LSTable {
	// PRIVATE ARGUMENTS
	var $template;							// string
	var $numRows, $numCols;						// int
	var $title;							// string
	var $text = array();						// string
	var $cellsAttributes = array(), $rowsAttributes = array();	// string
	var $hiddenRows = array(), $hiddenCols = array();		// bool
	var $width;							// string

	var $temp_col;							// int
	var $temp_ascending;						// bool

	// PUBLIC FUNCTIONS
	/**

  • @return
  • @param int $numRows
  • @param int $numCols
  • @param string $width
  • @param object $parent
  • @desc Constructor. You can put a $parent object. This will search the first empty place into the parent.
    • /
function LSTable ( $numRows, $numCols, $width, &$parent ) { $this->numRows = intval( $numRows ); $this->numCols = intval( $numCols ); for( $i = 0; $i < $numRows; $i++ ) $this->_setVariable( $i ); for( $i = 0; $i < $numCols; $i++ ) $this->hiddenCols[ $i ] = TABLE_DEFAULT_COL_HIDDEN; $this->title = ''; $this->width = strval( $width ); if( defined( 'TABLE_DEFAULT_TEMPLATE' ) ) $this->setTemplate( TABLE_DEFAULT_TEMPLATE ); // We look for an empty place if $parent isn't null if( is_object( $parent ) ) { $stop = false; for( $i = 0; $i < $parent->numRows; $i++ ) { for( $j = 0; $j < $parent->numCols; $j++ ) { if( $parent->text[ $i ][ $j ] == TABLE_DEFAULT_CELL_VALUE ) { $parent->text[ $i ][ $j ] =& $this; $stop = true; } if( $stop == true ) break; } if( $stop == true ) break; } } } // No destructor for PHP4 //function __destruct() { // //} /**
  • @return void
  • @param int $row
  • @param int $col
  • @param mixed $string
  • @desc Writes Text or Object into $row and $col.
    • /
function setText ( $row, $col, $string ) { if( !is_object( $string ) ) $string = strval( $string ); if( is_int( $row ) && is_int( $col ) ) if( $row < $this->numRows && $col < $this->numCols ) $this->text[ $row ][ $col ] = $string; } /**
  • @return void
  • @param int $row
  • @param int $col
  • @param string $attrib
  • @param mixed $value
  • @desc Adds a Cell Attribute at $row and $col.
    • /
function addCellAttribute ( $row, $col, $attrib, $value ) { if( is_int( $row ) && is_int( $col ) && is_string( $attrib ) ) if( $row < $this->numRows && $col < $this->numCols ) $this->cellsAttributes[ $row ][ $col ][ strtolower( $attrib ) ] = $value; } /**
  • @return void
  • @param int $row
  • @param int $col
  • @param string $attrib
  • @desc Deletes a Cell Attribute at $row and $col.
    • /
function delCellAttribute ( $row, $col, $attrib ) { if( is_int( $row ) && is_int( $col ) && is_string( $attrib ) ) if( $row < $this->numRows && $col < $this->numCols ) unset( $this->cellsAttributes[ $row ][ $col ][ strtolower( $attrib ) ] ); } /**
  • @return void
  • @param int $row
  • @param string $attrib
  • @param mixed $value
  • @desc Adds a Row Attribute at $row. Will be located in TR.
    • /
function addRowAttribute ( $row, $attrib, $value ) { if( is_int( $row ) && is_string( $attrib ) ) if( $row < $this->numRows ) $this->rowsAttributes[ $row ][ strtolower( $attrib ) ] = $value; } /**
  • @return void
  • @param int $row
  • @param string $attrib
  • @desc Deletes a Row Attribute at $row.
    • /
function delRowAttribute ( $row, $attrib ) { if( is_int( $row ) && is_string( $attrib ) ) if( $row < $this->numRows ) unset( $this->rowsAttributes[ $row ][ strtolower( $attrib ) ] ); } /**
  • @return void
  • @param int $row
  • @param string $attrib
  • @param mixed $value
  • @desc Adds a Cell Attribute in all cells located on $row row.
    • /
function addAllCellsInRowAttribute ( $row, $attrib, $value ) { if( is_int( $row ) && is_string( $attrib ) ) if( $row < $this->numRows ) for( $i = 0; $i < $this->numCols; $i++ ) $this->cellsAttributes[ $row ][ $i ][ strtolower( $attrib ) ] = $value; } /**
  • @return void
  • @param int $col
  • @param string $attrib
  • @param mixed $value
  • @desc Adds a Cell Attribute in all cells located on $col column.
    • /
function addAllCellsInColAttribute ( $col, $attrib, $value ) { if( is_int( $col ) && is_string( $attrib ) ) if( $col < $this->numCols ) for( $i = 0; $i < $this->numRows; $i++ ) $this->cellsAttributes[ $i ][ $col ][ strtolower( $attrib ) ] = $value; } /**
  • @return void
  • @param callback $template
  • @desc Sets Template (Class)
    • /
function setTemplate ( $template ) { if( is_string( $template ) ) if( class_exists( $template ) ) $this->template = strval( $template ); } /**
  • @return string
  • @desc Returns current Template
    • /
function template () { return $this->template; } /**
  • @return mixed
  • @param int $row
  • @param int $col
  • @desc Returns the text or object contained into $row and $col
    • /
function text ( $row, $col ) { if( is_int( $row ) && is_int( $col ) ) if( $row < $this->numRows && $col < $this->numCols ) return $this->text[ $row ][ $col ]; return FALSE; } /**
  • @return void
  • @param int $row
  • @param int $col
  • @desc Clears the cell located into $row and $col. Keeps the Cell.
  • /
function clearCell ( $row, $col ) { if( is_int( $row ) && is_int( $col ) ) { if( $row < $this->numRows && $col < $this->numCols ) { $this->text[ $row ][ $col ] = TABLE_DEFAULT_CELL_VALUE; unset( $this->cellsAttributes[ $row ][ $col ] ); $this->cellsAttributes[ $row ][ $col ] = array(); } } } /**
  • @return int
  • @desc Returns the number of Rows
    • /
function numRows () { return $this->numRows; } /**
  • @return int
  • @desc Returns the number of Columns
    • /
function numCols () { return $this->numCols; } /**
  • @return void
  • @param int $col
  • @param bool $ascending
  • @desc Sorts table based on $col.
    • /
function sortColumn ( $col, $ascending = TRUE ) { if( is_int( $col ) && is_bool( $ascending ) ) { if( $col < $this->numCols ) { $this->temp_col = $col; $this->temp_ascending = $ascending; $this->_sort_merge( $this->text ); } } } /**
  • @return void
  • @param int $r
  • @desc Sets the number of rows of the table.
    • /
function setNumRows ( $r ) { if( is_int( $r ) ) if( $r >= 0 ) if( $r > $this->numRows ) $this->insertRows( $this->numRows, $r - $this->numRows ); elseif( $r < $this->numRows ) for( $i = $this->numRows; $i > $r; $i-- ) $this->removeRow( $i - 1 ); } /**
  • @return void
  • @param int $r
  • @desc Sets the number of columns of the table.
    • /
function setNumCols ( $r ) { if( is_int( $r ) ) if( $r >= 0 ) if( $r > $this->numCols ) $this->insertColumns( $this->numCols, $r - $this->numCols ); elseif( $r < $this->numCols ) for( $i = $this->numCols; $i > $r; $i-- ) $this->removeColumn( $i - 1 ); } /**
  • @return void
  • @param int $row
  • @desc Hides a $row from table
    • /
function hideRow ( $row ) { if( is_int( $row ) ) if( $row < $this->numRows ) $this->hiddenRows[ $row ] = TRUE; } /**
  • @return void
  • @param int $col
  • @desc Hides a $col from table
    • /
function hideColumn ( $col ) { if( is_int( $col ) ) if( $col < $this->numCols ) $this->hiddenCols[ $col ] = TRUE; } /**
  • @return void
  • @param int $row
  • @desc Shows a $row from table
    • /
function showRow ( $row ) { if( is_int( $row ) ) if( $row < $this->numRows ) $this->hiddenRows[ $row ] = FALSE; } /**
  • @return void
  • @param int $col
  • @desc Shows a $col from table
    • /
function showColumn ( $col ) { if( is_int( $col ) ) if( $col < $this->numCols ) $this->hiddenCols[ $col ] = FALSE; } /**
  • @return bool
  • @param int $row
  • @desc Returns TRUE if a row is hidden.
    • /
function isRowHidden ( $row ) { if( is_int( $row ) ) if( $row < $this->numRows ) return $this->hiddenRows[ $row ]; return FALSE; } /**
  • @return bool
  • @param int $col
  • @desc Returns TRUE if a col is hidden.
    • /
function isColumnHidden ( $col ) { if( is_int( $col ) ) if( $col < $this->numCols ) return $this->hiddenCols[ $col ]; return FALSE; } /**
  • @return void
  • @param int $row1
  • @param int $row2
  • @param bool $swapAttributes
  • @desc Swaps 2 rows. Swaps attributes if $switchAttributes is TRUE.
    • /
function swapRows ( $row1, $row2, $swapAttributes = FALSE ) { if( is_int( $row1 ) && is_int( $row2 ) && is_bool( $swapAttributes ) ) { if( $row1 < $this->numRows && $row2 < $this->numRows ) { $temp =& $this->text[ $row1 ]; $this->text[ $row1 ] =& $this->text[ $row2 ]; $this->text[ $row2 ] =& $temp; if( $swapAttributes == TRUE ) { $temp2 = $this->cellsAttributes[ $row1 ]; $this->cellsAttributes[ $row1 ] = $this->cellsAttributes[ $row2 ]; $this->cellsAttributes[ $row2 ] = $temp2; $temp2 = $this->rowsAttributes[ $row1 ]; $this->rowsAttributes[ $row1 ] = $this->rowsAttributes[ $row2 ]; $this->rowsAttributes[ $row2 ] = $temp2; } } } } /**
  • @return void
  • @param int $col1
  • @param int $col2
  • @param bool $swapAttributes
  • @desc Swaps 2 cols. Swaps attributes if $switchAttributes is TRUE.
    • /
function swapColumns ( $col1, $col2, $swapAttributes = FALSE ) { if( is_int( $col1 ) && is_int( $col2 ) && is_bool( $swapAttributes ) ) { if( $col1 < $this->numCols && $col2 < $this->numCols ) { for( $i = 0; $i < $this->numRows; $i++ ){ $temp =& $this->text[ $i ][ $col1 ]; $this->text[ $i ][ $col1 ] =& $this->text[ $i ][ $col2 ]; $this->text[ $i ][ $col2 ] =& $temp; if( $swapAttributes == TRUE ) { $temp2 = $this->cellsAttributes[ $i ][ $col1 ]; $this->cellsAttributes[ $i ][ $col1 ] = $this->cellsAttributes[ $i ][ $col2 ]; $this->cellsAttributes[ $i ][ $col2 ] = $temp2; } } } } } /**
  • @return void
  • @param int $row1
  • @param int $col1
  • @param int $row2
  • @param int $col2
  • @param bool $swapAttributes
  • @desc Swaps 2 cells. Swaps attributes if $switchAttributes is TRUE.
    • /
function swapCells ( $row1, $col1, $row2, $col2, $swapAttributes = FALSE ) { if( is_int( $row1 ) && is_int( $col1 ) && is_int( $row2 ) && is_int( $col2 ) && is_bool( $swapAttributes ) ) { if( $row1 < $this->numRows && $col1 < $this->numCols && $row2 < $this->numRows && $col2 < $this->numCols ) { $temp =& $this->text[ $row1 ][ $col1 ]; $this->text[ $row1 ][ $col1 ] =& $this->text[ $row2 ][ $col2 ]; $this->text[ $row2 ][ $col2 ] =& $temp; if( $swapAttributes == TRUE ) { $temp2 = $this->cellsAttributes[ $row1 ][ $col1 ]; $this->cellsAttributes[ $row1 ][ $col1 ] = $this->cellsAttributes[ $row2 ][ $col2 ]; $this->cellsAttributes[ $row2 ][ $col2 ] = $temp2; } } } } /**
  • @return void
  • @param int $row
  • @param int $count
  • @desc Inserts $count row at $row position.
    • /
function insertRows ( $row, $count = 1 ) { if( is_int( $row ) && is_int( $count ) ) { if( $row >= 0 && $row <= $this->numRows ) { for( $i = 0; $i < $count; $i++) { array_splice( $this->text, $row, 0, '' ); array_splice( $this->hiddenRows, $row, 0, FALSE ); array_splice( $this->cellsAttributes, $row, 0, FALSE ); array_splice( $this->rowsAttributes, $row, 0, FALSE ); $this->_setVariable( $row ); $this->numRows += 1; } } } } /**
  • @return void
  • @param int $col
  • @param int $count
  • @desc Inserts $count columns at $col position.
    • /
function insertColumns ( $col, $count = 1 ) { if( is_int( $col ) && is_int( $count ) ) { if( $col >= 0 && $col <= $this->numCols ) { for( $i = 0; $i < $this->numRows; $i++ ) { $temp_text = array(); $temp_attributes = array(); reset($this->text[ $i ]); for( $j = 0; $j <= $this->numCols; $j++ ) { if( $col == $j ) { for( $k = 0; $k < $count; $k++ ){ $temp_text[] = ''; $temp_attributes[] = array(); } } if( $j == $this->numCols ) break; $temp_text[] = $this->text[ $i ][ $j ]; $temp_attributes[] = $this->cellsAttributes[ $i ][ $j ]; } $this->text[ $i ] = $temp_text; $this->cellsAttributes[ $i ] = $temp_attributes; } for( $i = 0; $i < $count; $i++ ) array_splice( $this->hiddenCols, $col, 0, FALSE ); $this->numCols += $count; } } } /**
  • @return void
  • @param int $row
  • @desc Removes $row.
    • /
function removeRow ( $row ) { if( is_int( $row ) ) { if( $row < $this->numRows ) { array_splice( $this->text, $row, 1 ); array_splice( $this->hiddenRows, $row, 1 ); array_splice( $this->cellsAttributes, $row, 1 ); array_splice( $this->rowsAttributes, $row, 1 ); $this->numRows -= 1; } } } /**
  • @return void
  • @param int $col
  • @desc Removes $col.
    • /
function removeColumn ( $col ) { if( is_int( $col ) ) { if( $col < $this->numCols ) { for( $i = 0; $i < $this->numRows; $i++ ) { $temp_text = array(); $temp_attributes = array(); reset($this->text[ $i ]); while ( list( $key, ) = each( $this->text[ $i ] ) ) { if( $key != $col ) { $temp_text[] = $this->text[ $i ][ $key ]; $temp_attributes[] = $this->cellsAttributes[ $i ][ $key ]; } } $this->text[ $i ] = $temp_text; $this->cellsAttributes[ $i ] = $temp_attributes; } array_splice( $this->hiddenCols, $col, 1 ); $this->numCols -= 1; } } } /**
  • @return void
  • @param int $width
  • @desc Sets Table Width.
    • /
function setWidth ( $width ) { if( is_string( $width ) ) $this->width = strval( $width ); } /**
  • @return string
  • @desc Returns Table Width.
    • /
function width () { return $this->width; } /**
  • @return void
  • @param int $title
  • @desc Sets Table Title.
    • /
function setTitle ( $title ) { if( is_string( $title ) ) $this->title = strval( $title ); } /**
  • @return string
  • @desc Returns Table Title.
    • /
function title () { return $this->title; } /**
  • @return void
  • @desc Displays the table with its cells.
    • /
function draw () { if( $this->template != '' ) { $tpl = new $this->template; $tpl->__header( $this->width, $this->title ); $this->_check_rowcol_span(); for( $i = 0; $i < $this->numRows; $i++ ) { if( $this->hiddenRows[ $i ] == FALSE ) { $tpl->__row_start( $this->rowsAttributes[ $i ] ); for( $j = 0; $j < $this->numCols; $j++ ) { if( $this->hiddenCols[ $j ] == FALSE ) { if( $this->text[ $i ][ $j ] !== NULL ) { if( is_object( $this->text[ $i ][ $j ] ) ) { $tpl->__cell_start( '', $this->cellsAttributes[ $i ][ $j ] ); $this->text[ $i ][ $j ]->draw(); } else $tpl->__cell_start( $this->text[ $i ][ $j ], $this->cellsAttributes[ $i ][ $j ] ); $tpl->__cell_stop( $this->text[ $i ][ $j ], $this->cellsAttributes[ $i ][ $j ] ); } } } $tpl->__row_stop( $this->rowsAttributes[ $i ] ); } } $tpl->__footer( $this->width, $this->title ); } } // PRIVATE FUNCTIONS /**
  • @return void
  • @desc Sets NULL to cells if colspan or rowspan go on the cells
    • /
function _check_rowcol_span() { for( $i = 0; $i < $this->numRows; $i++ ) { for( $j = 0; $j < $this->numCols; $j++ ) { if( isset( $this->cellsAttributes[ $i ][ $j ][ 'colspan' ] ) ) if( $this->cellsAttributes[ $i ][ $j ][ 'colspan' ] > 0 ) for( $z = 1; $z < intval( $this->cellsAttributes[ $i ][ $j ][ 'colspan' ] ); $z++ ) $this->text[ $i ][ $j + $z ] = NULL; if( isset( $this->cellsAttributes[ $i ][ $j ][ 'rowspan' ] ) ) if( $this->cellsAttributes[ $i ][ $j ][ 'rowspan' ] > 0 ) for( $z = 1; $z < intval( $this->cellsAttributes[ $i ][ $j ][ 'rowspan' ] ); $z++ ) $this->text[ $i + $z ][ $j ] = NULL; } } } /**
  • @return void
  • @param int $r
  • @desc Sets Default Variables for row $r.
    • /
function _setVariable ( $r ) { $this->text[ $r ] = array_fill( 0, $this->numCols, TABLE_DEFAULT_CELL_VALUE ); $this->cellsAttributes[ $r ] = array_fill( 0, $this->numCols, array() ); $this->rowsAttributes[ $r ] = array(); $this->hiddenRows[ $r ] = TABLE_DEFAULT_ROW_HIDDEN; } /**
  • @return void
  • @param int $r
  • @desc Unsets Default Variables for row $r.
    • /
function _unsetVariable ( $r ) { unset( $this->text[ $r ] ); unset( $this->cellsAttributes[ $r ] ); unset( $this->rowsAttributes[ $r ] ); unset( $this->hiddenRows[ $r ] ); } /**
  • @return void
  • @param string $tab
  • @desc Merge Function
    • /
function _sort_merge ( &$tab ) { if( count( $tab ) <= 1 ) return; else { $tab1 = array(); $tab2 = array(); for( $i = 0; $i < count( $tab ); $i++) { if( $i < ( count( $tab ) ) / 2 ) $tab1[] = $tab[ $i ]; else $tab2[] = $tab[ $i ]; } $this->_sort_merge( $tab1 ); $this->_sort_merge( $tab2 ); $this->_merge_all( $tab1, $tab2, $tab ); } } /**
  • @return void
  • @param string $tab1
  • @param string $tab2
  • @param string $tab
  • @desc Merge Function
    • /
function _merge_all ( $tab1, $tab2, &$tab ) { $i = 0; $i1 = $i2 = 0; while( $i1 < count( $tab1 ) && $i2 < count( $tab2 ) ) { if( strcmp( $tab1[ $i1 ][ $this->temp_col ], $tab2[ $i2 ][ $this->temp_col ] ) == (($this->temp_ascending==TRUE)?-1:1) ) $tab[ $i ] = $tab1[ $i1++ ]; else $tab[ $i ] = $tab2[ $i2++ ]; $i++; } while( $i1 < count( $tab1 ) ) { $tab[ $i ] = $tab1[ $i1++ ]; $i++; } while( $i2 < count( $tab2 ) ) { $tab[ $i ] = $tab2[ $i2++ ]; $i++; } } } ?>

Conclusion :


Si vous avez des questions n'hésitez pas !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_GRenard
Messages postés
1663
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
Mise à jour du script. Version 1.05 !
cs_GRenard
Messages postés
1663
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
Mise à jour du script. Version 1.03 !
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Tout dépend de la longueur de ta boucle, et puis du "très peu" + "très peu" + "très peu", ça fait beaucoup mdr !

A ++
cs_GRenard
Messages postés
1663
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
Merci du commentaire... j'updaterai lorsque j'aurai le temps, mais disons que c'est rare que je fais ça (pas updater, mais ske tu as dit :P)... Car la vitesse ici serait TRÈS peu différente.
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut ;-)

Tous tes :
- while( $i1 < count( $tab1 )
- while( $i1 < count( $tab1 ) )
- while( $i2 < count( $tab2 ) )

ne sont pas optimisés. Il faut stocker la valeur count($tableau) dans une variable sinon elle est recalculée à chaque fois :

$ci1=count($tab1);
while($i1<$ci1)
{
traitement
}

a ++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.