Classe constructeur de tableau html en php (revu et corrigé)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 184 fois - Téléchargée 15 fois

Contenu du snippet

Cette classe développée en php permet de construire simplement un tableau Html...

Cette classe n'est peut être pas optimisée au mieux mais fonctionne...

Je suis étudiant en BTS informatique et ce code est ma première contribution à cette communauté.
Je reste donc ouvert à toute suggestion, remarque, conseil...

En espérant avoir apporté quelque chose d'utile...

Demonstorm

Source / Exemple :


<?php
	class Tableau
	{
		private $_Header= '';
		private $_DebutTab= '<table border=';
		private $_FinTab= '</table>';
		private $_MonTableau= '';
		private $_MesLignes= array();
		private $_TabValide= false;
		
		public function Tableau($MonHeader, $nbcols, $border)
		{
			$this->_DebutTab .= $border;
			$this->_DebutTab .= '>';
			
			$this->_Header = '<th colspan='.$nbcols.'>';
			$this->_Header .= $MonHeader;
			$this->_Header .='</th></tr>';//on construit notre header
		}
		
		public function AjouterLigne(array $MesValeursRecues)
		{
			$UneLigne = new Ligne($MesValeursRecues);//on créé une ligne avec pour argument(s) un tableau de valeur(s)
			array_push($this->_MesLignes, $UneLigne);//on ajoute cette ligne au tableau de lignes
			$this->_TabValide = false;
		}
		
		public function Finalize()
		{
			$this->_MonTableau=$this->_DebutTab;//on commence à construire notre tableau
			$this->_MonTableau.=$this->_Header;//on ajoute le header
			foreach ($this->_MesLignes as $LigneEnCours => $this->_MesLignes[$LigneEnCours]) //pour chaque ligne dans le tableau de ligne(s)
			{
				$this->_MonTableau .= $this->_MesLignes[$LigneEnCours]->Finalize();//on ajoute à notre tableau la ligne en cours constituée
			}
			$this->_MonTableau.=$this->_FinTab;//on ferme notre tableau
			$this->_TabValide = true;
		}
		
		public function Center()
		{
			if($this->_TabValide == true)
			{
				$this->_MonTableau = '<center>'.$this->_MonTableau.'</center>';
			}
			else
			{
				echo 'Tableau non validé!<br>Veuillez vallider votre tableau avant de le centrer...';
			}
			
		}
		
		public function Show()
		{
			if($this->_TabValide == true)
			{
				echo $this->_MonTableau;//affiche le tableau
			}
			else
			{
				echo 'Tableau non validé!<br>Veuillez vallider votre tableau avant de l\'afficher...';
			}
		}
		

		public function ShowCode()
		{
			if($this->_TabValide == true)
			{
				echo(htmlentities($this->_MonTableau));//Affiche le code Html du Tableau constitué!
			}
			else
			{
				echo 'Tableau non validé!<br>Veuillez vallider votre tableau avant de d\'afficher son code Html...';
			}
			
		}
	}

	class Ligne
	{
		private $_MaLigne='';
		private $_DebLigne='<tr>';
		private $_FinLigne='</tr>';
		private $_MesColonnes=array();
		
		public function Ligne(array $MesColonnesRecues)//on attend un array de valeur(s)(chaque valeur deviendra une cellule
		{
			foreach ($MesColonnesRecues as $UneColonne => $MesColonnesRecues[$UneColonne]) //pour chaque valeurs de l'array de valeur(s)
			{
				$NouvelleColonne = new Colonne($MesColonnesRecues[$UneColonne][0], $MesColonnesRecues[$UneColonne][1]);//on instancie une cellule avec pour argument la valeur en cours
				array_push($this->_MesColonnes, $NouvelleColonne);//on ajoute cette cellule au tableau de cellules
			}
		}
		
		
		public function Finalize()
		{
			$this->_MaLigne=$this->_DebLigne;//on commence a construire notre ligne
			foreach($this->_MesColonnes as $ColonneEnCours => $this->_MesColonnes[$ColonneEnCours])//pour chaques cellules existante dans le tableau de cellules
			{
				$this->_MaLigne .=$this->_MesColonnes[$ColonneEnCours]->Finalize();//on ajoute a notre ligne la cellule constituée 
			}
			$this->_MaLigne.=$this->_FinLigne;//on termine notre cellule on obtient alors <tr><td>contenu</td></tr>
			
			return $this->_MaLigne;//on renvoi notre ligne constituée
		}
	}
		
	class Colonne
	{
		private $_MaColonne='';
		private $_DebutCol='<td colspan=';
		private $_FinCol='</td>';
		
		public function Colonne($MaValRecue, $MaColsRecue)//on attend le contenu de la cellule
		{
			$this->_DebutCol .= $MaColsRecue;
			$this->_DebutCol .= '>';
			$this->_MaColonne = $this->_DebutCol;
			$this->_MaColonne .= $MaValRecue;
			$this->_MaColonne .=$this->_FinCol;//on construit notre cellule <td>contenu</td>
		}
		
		public function Finalize()
		{
			return $this->_MaColonne;//on renvoi notre cellule constituée
		}
	}

?>

Conclusion :


Pour l'utiliser :

1) rajouter ceci au sommet (a l'intérieur de la balise <?php ) de la page qui devra utiliser des tableaux :

include($path."tabconstruct.php");

2) créer un objet de type tabconstruct comme ceci :

$montabconstructor = new tabconstruct();

3) exemple d'utilisation :

$UnHeader = 'Mon Tableau';
$UnHeaderColSpan = "100%";
$UnHeaderBorder = 2;

$UnTableau = new Tableau($UnHeader, $UnHeaderColSpan, $UnHeaderBorder);

$arrLigne = array(array("Ligne1 Colonne1", "50%"), array("Ligne1 Colonne2", "50%"));//(ici 2 colonnes)
$UnTableau->AjouterLigne($arrLigne);
$arrLigne=0;

$arrLigne = array(array("Ligne2 Colonne1", "33%"), array("Ligne2 Colonne2", "34%"), array("Ligne2 Colonne3", "33%")); //le pourcentage correspond au cols pan et s'obtient comme suit : 100/nombre de colonne que cela recouvre (ici 3 colonnes)
$UnTableau->AjouterLigne($arrLigne);
$arrLigne=0;

$arrLigne = array(array("Ligne3 Colonne1", "25%"), array("Ligne3 Colonne2", "25%"), array("Ligne3 Colonne3", "25%"), array("Ligne3 Colonne4", "25%"));// (ici 4 colonnes)
$UnTableau->AjouterLigne($arrLigne);
$arrLigne=0;

$arrLigne = array(array("Ligne4 Colonne1", "20%"), array("Ligne4 Colonne2", "20%"), array("Ligne4 Colonne3", "20%"), array("Ligne4 Colonne4", "20%"), array("Ligne4 Colonne5", "20%"));// (ici 5 colonnes)
$UnTableau->AjouterLigne($arrLigne);
$arrLigne=0;

$UnTableau->Finalize();
$UnTableau->Center();
$UnTableau->Show();
  • BONUS *


Cette méthode vous permet d'afficher le code html de votre tableau (ca peut servir pour certains)

$UnTableau->ShowCode();

A voir également

Ajouter un commentaire

Commentaires

cs_demonstorm
Messages postés
29
Date d'inscription
samedi 2 juin 2007
Statut
Membre
Dernière intervention
7 mars 2011
-
<>
En plus! Donc voila au final je n'en connais qu'un! :/
bj33
Messages postés
145
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
1 mai 2012
-
salut

<<Après je ne connais pas énormément de DP (2 en fait : Singleton et Polymorphisme)...

pour le singleton, ok mais le polymorphisme n'est pas un design pattern.

http://www.nexen.net/actualites/tutorial/16737-le_polymorphisme_en_php_:_1ere_partie.php

<<ca n'aurai pas pu être parfait dès le premier code posté!

ce n'est pas le but non plus:) et puis les codes géniaux on sait ou aller les chercher voire comment les coder(sic).
cs_demonstorm
Messages postés
29
Date d'inscription
samedi 2 juin 2007
Statut
Membre
Dernière intervention
7 mars 2011
-
enfin faut se dire aussi qu'à moins d'être un petit génie ca n'aurai pas pu être parfait dès le premier code posté! :/

Après je ne connais pas énormément de DP (2 en fait : Singleton et Polymorphisme)...
bj33
Messages postés
145
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
1 mai 2012
-
salut

ok mais en l'état, elle ne mérite pas le niveau initié. manque de return, pour le chainage. Mauvaise utilisation du html généré, essai de relire le code source html généré. La méthode finalise n'à aucun intérét. et çà,

public function Show()
{
echo $this->_MonTableau;//affiche le tableau
}

public function Resultat()
{
return $this->_MonTableau;//renvoi le tableau
}


doublon inutile même si je vois la finalité j'ai du mal avec la logique. pense aux fonctions magiques, call, get, set etc. utilise pourquoi pas les patterns, içi, ils feraient merveille.
des méthodes statiques pour ton html. Je pourrais mais je vais faire simple, tu te prends la tête avec les tableaux, 80% sont inutiles, génération de html mal pensée, pour générer...un tableau. Une note? 8/20. Mais ce n'est que mon avis, je génére aussi beaucoup de tableaux dynamique hors bdd;) Intéressant mais manque maturité et en l'état pas très utile. Et vire les echo dans les classes, pense aux erreurs possibles, de paramètres par exemple.
cs_demonstorm
Messages postés
29
Date d'inscription
samedi 2 juin 2007
Statut
Membre
Dernière intervention
7 mars 2011
-
Serait il possible que vous notiez ma source afin d'avoir une petite idée de ce qu'elle peut valoir?

Ps: Je compte la présenter comme Application Professionnelle pour mes oraux du BTS (on doit en présenter 5 au minimum (7 au maximum) et on est interrogé sur 1 seule)

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.