CLASSE CONSTRUCTEUR DE TABLEAU HTML EN PHP (REVU ET CORRIGÉ)

phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 - 22 févr. 2011 à 15:32
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011 - 8 mars 2011 à 09:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52842-classe-constructeur-de-tableau-html-en-php-revu-et-corrige

cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
8 mars 2011 à 09:34
<>
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
7 mars 2011 à 18:02
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
7 mars 2011 à 14:17
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
2 mars 2011 à 22:16
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
2 mars 2011 à 10:11
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)
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
28 févr. 2011 à 16:17
désolé pour ce troisième post mais impossible d'éditer.

<<SqueletteXhtml::table(...) ou SqueletteXhtml::$_doctypeTrans

correction, la variable étant privé, on fera,

SqueletteXhtml::table(...) ou self::$_doctypeTrans

autre correction

config sans contraintes ou/et les fixer
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
28 févr. 2011 à 16:11
Je vais voir ca, merci! :)
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
28 févr. 2011 à 16:08
http://www.phpcs.com/tutoriaux/DESIGN-PATTERNS_729.aspx

un bon point de départ pour la POO php et les patterns signé malalam, un cador du genre. 4 pages pour tout comprendre.
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
28 févr. 2011 à 15:52
class SqueletteXhtml implements ISqueletteXhtml {
private static $_doctypeTrans = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
private static $_doctypeStrict = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';

public static function table(array $tab_params, $contenu) {
$tp = '<table ';
foreach ($tab_params as $k => $v) {
if (end($tab_params) == $v)
$tp .= $k.'="'.$v.'"';
else $tp .= $k.'="'.$v.'" ';
}
$tp .= '>'.chr(10);
$tp .= $contenu;
$tp .= self::ferme('table');
return $tp;
}
}

là, je fais,

include_once 'SqueletteXhtml.php';

SqueletteXhtml::table(...) ou SqueletteXhtml::$_doctypeTrans

çà permet de se servir des méthodes de classes n'importe où, y compris hors de la classe et ce à plusieurs niveaux d'imbrication. très pratique.
ce n'est pas la seule utilité des méthodes et variables statiques mais s'en est une.

un design pattern fabrique, c'est par exemple,

final class Fabrique {
private static $_instance = null;
private $_namespace;

/**
* constructeur protege pour empecher une instanciation directe
*/
protected function __construct() {}

/**
* retourne une instance de la classe en tenant compte du namespace
*
* @param $namespace
* @return object
*/
public static function getInstance($namespace = null) {
if (is_null(self::$_instance)) {
self::$_instance = new self;
}
self::$_instance->_namespace = $namespace;
return self::$_instance;
}

public function __call($methodes,$arguments) {
$classe = ucfirst(strtolower($this->_namespace.$methodes));
if (class_exists($classe,false)) {
$retourClasse = new ReflectionClass($classe);
if ($retourClasse->isInstantiable() && $retourClasse->hasMethod('__construct')) {
return $retourClasse->newInstanceArgs($arguments);
} else {
throw new Format_Generique('La classe '.$classe.' n\'est pas instanciable');
}
} else {
throw new Format_Generique('La classe '.$classe.' est introuvable');
}
}
}

ne mélange pas tout;) une classe abstraite,

abstract class NettoyageFormulaire {
protected static function nettoie($variable) {
if (get_magic_quotes_gpc()) {
stripslashes($variable);
}
$variable = trim(strip_tags($variable));
return $variable;
}
}

et là, je fais,

include_once 'NettoyageFormulaire.php';

NettoyageFormulaire::nettoie()

une classe abstraite çà peut aussi être çà,

abstract class Chemin {
const CHEMIN_CLASSES = 'classes/';
const CHEMIN_FONCTIONS_UTILITAIRES = 'classes/utilitaires/fonctions/';
const CHEMIN_INC = 'includes/';
}

pour accéder au facilement aux paramètres de config sans contraintes ou les fixer. çà vient en bossant, t'inquiete pas. ce ne sont que des exemples, cherche les tutos de malaman, admin du réseau cs, ce sont les meilleurs.
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
28 févr. 2011 à 14:41
bah je suis plus à l'aise avec C#, ca c'est sur...

la classe abstraite fait appelle au DP Fabrique abstraite (ou abstract factory) d'après ce que nous en a dit le prof du coup comme je n'ai pas compris ce DP la ben je coince...
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
28 févr. 2011 à 14:08
<<Pour abstraite je ne l'utilise jamais, car je n'ai jamais compris le DP de la fabrique abstraite ni même son utilité

classe abstraite, pas design pattern ;)

http://fr2.php.net/manual/fr/language.oop5.php

et tu est plus a l'aise avec csharp!?
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
28 févr. 2011 à 13:45
Merci JB, j'essaierai NB,

pour <<private $_DebutTab='<table border='; je ne gère pas le header html ma class, difficile donc de mettre en place du CSS...

Pour ce qui est de static et abstraite et static je me heurte a 2 problème pour static n'ayant pas compris l'entière utilité de static je l'utilise pas trop (la seule chose vu en cours concernant static est le fait qu'une classe, methode ou variable static est directement utilisable sans aucune instanciation (c'est la seule chose que le prof nous a dit)

Pour abstraite je ne l'utilise jamais, car je n'ai jamais compris le DP de la fabrique abstraite ni même son utilité (j'aimerai d'ailleurs la comprendre)
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
28 févr. 2011 à 13:25
salut

<<même si j'aimerai utiliser un éditeur qui m'assisterait un peu plus...

NP++ comme beaucoup de débutants. mais il y a bien mieux, netbeans, par exemple, ou encore mieux, zend studio mais là, bien sur, il faut payer. Mais netbeans est plus qu'éfficace et gratuit, et il gére aussi le java, c, c++, etc. presque aussi éfficace que zs, alors.

<<private $_DebutTab='<table border=';

ce border, çà fait désordre;) c'est aux css de gérer çà. a la limite un style=""

et perso, j'ai coder des classes pour générer des tableaux à la volée mais avec des méthodes statiques et des classes abstraites...si tu manques d'inspiration, n'hésite pas.
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
28 févr. 2011 à 11:12
PS : vous remarquerez que je reste ouvert à tout conseil et/ou toute remarque, cependant n'oubliez pas que je encore étudiant en développement...

Une petite note? :P
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
28 févr. 2011 à 10:56
Voila terminé, source mise a jour!
Merci à Phpanonyme, Marm0te et Fenoril pour leurs conseils
et merci à Morphinof(ce pseudo serait il un petit clin d'œil évoquant la notion de Polymorphisme?) pour avoir pris le temps de me donner des conseil, de m'orienter vers certaines idées, m'avoir apporter pas mal de réponses...

Alain04 => C'est jamais très joli (mais quand même un peu plus facile pour les neos) de mettre du html dans du php (personnellement si je connais une façon systématique de séparer php de html (autre que par le principe de CSS+TPL+PHP) je le ferais...

L'intérêt de ce code (même si un peu lourd a utiliser (pas forcement compliqué, mais vachement répetitif) et de pouvoir générer un tableau sans html (principe d'objet oblige, la classe tabconstruct est entièrement réutilisable)

BJ33 => pour le htmlentities j'avais corrigé cela courant la semaine dernière mais merci d'y avoir pensé... Pour ce qui est de l'éditeur je n'en utilise pas, je tourne avec NP++ même si j'aimerai utiliser un éditeur qui m'assisterait un peu plus...
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
28 févr. 2011 à 07:19
salut

variable non définie

printf(htmlentities($_MonTableau));

return ($this->_MonTableau);

quand on utilise un éditeur digne de ce nom, çà saute aux yeux;)

pour la forme du code, il y à du boulot...courage
alain04 Messages postés 25 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 27 août 2012
28 févr. 2011 à 05:09
Waouhhh ! je dois être en retard d'une génération. Tant qu'à vouloir faire un tableau HTML (si j'ai bien compris)c'est pas plus simple et plus rapide de baliser ... en HTML?
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
25 févr. 2011 à 14:05
fait...
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
25 févr. 2011 à 12:22
Tu peux m'envoyer ta source que je puisse tester ?
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
25 févr. 2011 à 11:48
avec ca je n'ai plus d'erreur mais je n'ai toujours pas mes ligne(donc les colonnes non plus)...

voila la fonction Finalize de la classe Tableau :

public function Finalize()
{
$this->_MonTableau=$this->_DebutTab;//on commence a construire notre tableau
$this->_MonTableau.=$this->_Header;//on ajoute le header
foreach ($this->_MesLignes as $LigneEnCours => $value) //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
}
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
25 févr. 2011 à 10:52
Selon le libelle et sans lire le code ca viens de la :
foreach ($this->_MesLignes as $LigneEnCours => $value)

LigneEnCours n'est pas un objet Ligne et du coup tu peux pas appeller ta fonction surment parce que LigneEnCours est soit une chaine soit un entier qui correspond a l'index as cause de l'utilisation de as ton objet ligne est dans $value.

Je peux pas lire ton code je suis sur un truc mais si ca marche toujours pas apres ca je regarderai
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
25 févr. 2011 à 09:45
donc ca marche du coup comm j'avais oublié le => $value dans tous mes forech j'ai fais la correction et j'obtiens cette erreur maintenant :

Fatal error: Call to a member function Finalize() on a non-object in C:\Program Files\EasyPHP-5.3.3.1\www\tabconstruct.php on line 96

voila la fonction Finalize de la classe Tableau :

#90 public function Finalize()
#91 {
#92 $this->_MonTableau=$this->_DebutTab;//on commence a construire notre tableau
#93 $this->_MonTableau.=$this->_Header;//on ajoute le header
#94 foreach ($this->_MesLignes as $LigneEnCours => $value) //pour chaque ligne dans le tableau de ligne(s)
#95 {
#96 $this->_MonTableau.=$LigneEnCours->Finalize();//on ajoute à notre tableau la ligne en cours constituée
#97 }
#98 $this->_MonTableau.=$this->_FinTab;//on ferme notre tableau
#99 }

Quelqu'un aurait la solution?
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
25 févr. 2011 à 09:34
Mince encore le copier coller foireux ^^ $this->_MonTableau et pas $this->$_MonTableau :p
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
25 févr. 2011 à 09:04
Ah oui mdr! Je vais essayer ca...:)
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
24 févr. 2011 à 23:58
Hum.
public function ShowCode()
{
printf(htmlentities($_MonTableau));
}

$this->$_MonTableau ? :)
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
24 févr. 2011 à 12:00
Pour aperçu voila ce que j'obtiens :
http://img7.imageshack.us/img7/1135/blablablaxn.jpg
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
24 févr. 2011 à 11:30
Hello tout le monde, je ne comprend pas pour quoi mais la page ne m'affiche que le header du tableau...

<?php

class Tableau
{
private $_Header='';
private $_DebutTab='<table border=';
private $_FinTab='</table>';
private $_MonTableau='';
private $_MesLignes= array();

public function Tableau($MonHeader, $nbcols, $border)
{
$this->_DebutTab .= $border;
$this->_DebutTab .= '>';

$this->_Header = '<tr><th colspan='.$nbcols.'>';
$this->_Header .= $MonHeader;
$this->_Header .='</th></tr>';//on construit notre header
}

public function AjouterLigne($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
}

public function Finalize()
{
$this->_MonTableau=$this->_DebutTab;//on commence a construire notre tableau
$this->_MonTableau.=$this->_Header;//on ajoute le header
foreach ($this->_MesLignes as $LigneEnCours) //pour chaque ligne dans le tableau de ligne(s)
{
$this->_MonTableau.=$LigneEnCours->Finalize();//on ajoute à notre tableau la ligne en cours constituée
}
$this->_MonTableau.=$this->_FinTab;//on ferme notre tableau
}

public function PrintMesLignes()
{
print_r($this->_MesLignes);
}

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

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

public function ShowCode()
{
printf(htmlentities($_MonTableau));
}
}

class Ligne
{
private $_MaLigne='';
private $_DebLigne='<tr>';
private $_FinLigne='</tr>';
private $_MesColonnes=array();

public function Ligne($MesColonnesRecues)//on attend un array de valeur(s)(chaque valeur deviendra une cellule
{
foreach ($MesColonnesRecues as $UneColonne) //pour chaque valeurs de l'array de valeur(s)
{
$NouvelleColonne = new Colonne($UneColonne[0], $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 PrintMesColonnes()
{
print_r($this->_MesColonnes);
}

public function Finalize()
{
$this->_Maligne=$this->_DebLigne;//on commence a construire notre ligne
foreach($this->_MesColonnes as $ColonneEnCours)//pour chaques cellules existante dans le tableau de cellules
{
$this->_Maligne.=$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($MaColonneRecue)//on attend le contenu de la cellule
{
$this->_DebutCol .= (int)$MaColonneRecue[1];
$this->_DebutCol .= '>';
$this->_MaColonne = $this->_DebutCol;
$this->_MaColonne .= (string)$MaColonneRecue[0];
$this->_MaColonne .=$this->_FinCol;//on construit notre cellule <td>contenu</td>
}

public function Finalize()
{
return $this->_MaColonne;//on renvoi notre cellule constituée
}
}

?>

avec pour utilisation :

<?php

echo'
Début MonTableau
';
$UnHeader = 'Mon Tableau';

$UnHeaderColSpan = 3;

$UnHeaderBorder = 2;

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

$arrLigne1 = array(array('Ligne1 Colonne1', 1), array('Ligne1 Colonne2', 1), array('Ligne1 Colonne3', 1));

$UnTableau->AjouterLigne($arrLigne1);

$arrLigne2 = array(array('Ligne2 Colonne1', 2), array('Ligne Colonne2', 2));

$UnTableau->AjouterLigne($arrLigne2);

$UnTableau->Finalize();

$UnTableau->Show();

echo'
Fin MonTableau';
echo'

';

$UnTableau->ShowCode();

?>

Du coup je me suis dit que j'allais afficher le code html créé et donc dans la class Tableau j'ai créé la fonction ShowCode()

mais je ne comprend pas elle ne semble pas fonctionner(rien à l'ecran, même pas le code concernant le header de mon tableau(qui lui apparemment fonctionne))

Help me, pleaase help me, je deviens fououououououuuuu... (sur l'air de "Love me")
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
24 févr. 2011 à 09:40
J'insiste sur le fait que oui la conception objet c'est bien mais la c'est beaucoup pour juste generer un tableau. Des fois il vaut mieux faire simple en objet toujours sans pour autant faire toute une analyse d'abstraction de l'html surtout si tu as peu de temps devant toi.
Je te reconseille le simple tableau de lignes / colones, mettons que plus tard quelqu'un doive reprendre ton travail il faut qu'il puisse etre accessible et surtout le plus simple possible.

Bon courage pour la suite ;)
MagicGilles Messages postés 14 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 12 août 2011
23 févr. 2011 à 17:52
Pour répondre à ta question.
class A
{
private $montexte = 'bla';
function mafonction($mavariable)
{
$this->montexte = $mavariable;//affectation

echo $this->montexte; //affichage
}
}
MagicGilles Messages postés 14 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 12 août 2011
23 févr. 2011 à 17:46
Bah c'est pas aussi compliqué que ça. Je te donne la structure rapidement.
interface renderable
{
public function render();
public function __toString();
}
abstract class HtmlNode{
ici tu gères les noeuds. ajouter, supprimer etc
}
class AttributeElement extends HtmlNode implements renderable
{
//ici tu gères l'attribut sans oublier le render et le __toString
}
class HtmlElement extends HtmlNode implements renderable
{
//ici tu gères le nom de la balise, l'ajout,supprission d'attributs (sous entendu géré par HtmlAttribut) etc etc sans oublier le render et le __toString
}
class Table extends HtmlElement
{
}

Bon il y a sans doute possibilité de faire mieux niveau structuration mais ça donne une petite idée
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
23 févr. 2011 à 17:13
Oula MAGICGilles, je suis pas sur d'arriver à faire ca... :/
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
23 févr. 2011 à 17:11
imaginons j'ai une fonction comme ca :
class A
{
$montexte='bla';
function mafonction($mavaiable)
{
}
}

est ce que je dois faire :

class A
{
$montexte='bla';
function mafonction($mavariable)
{
$mavariable='blabla';
echo $this->mavariable.this->montexte;
}
}

ou :

class A
{
$montexte='bla';
function mafonction($mavariable)
{
$mavariable='blabla';
echo $mavariable.this->montexte;
}
}
MagicGilles Messages postés 14 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 12 août 2011
23 févr. 2011 à 17:09
Hum un petit détail en passant. En php 5 le constructeur s'appelle __construct. C'est juste pour la cohérence de ton code.
Je vois que tu fais du html donc pourquoi ne pas étendre une classe HtmlElement, une classe HtmlAttribut et une classe HtmlNode. Un peu à la façon de DomDocument (en plus light).
Tu peux aussi créer une interface renderable avec render (pour retourner le html sous forme de chaine) et __toString (qui appelle implicitement render). ça aurait le mérite de rendre réutilisable les classes créant du html.
Enfin c'est juste quelques idées comme ça en l'air
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
23 févr. 2011 à 16:56
Merci, je vais essayer avec ca! :)
Je vous tiens au courant...
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
23 févr. 2011 à 16:36
Desole j'ai copie coller et c'est $this->_MaColonne; pas $this->$_MaColonne; ^^ Je precise aussi que c'est la premiere erreur que j'ai vu j'ai pas pousse plus loin
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
23 févr. 2011 à 16:34
Heu c'est plutot normal puisque tu retourne des variables locales a tes methode et non ton attribut de classe.
Par exemple :
public function Finalize()
{
return $_MaColonne;
}

Tu est dans le scope de la methode Finalize mais $_MaColonne n'exite pas. Il faut retourner $this->$_MaColonne; et ce a chaque fois que tu veux utiliser un attribut.
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
23 févr. 2011 à 16:15
Coucou tout le monde, je viens de me pencher sur une mise à jour mais cela ne fonctionne pas...

<?php

class Tableau
{
private $_Header="";
private $_DebutTab="\";
private $_FinTab="
";
private $_MonTableau="";
private $_MesLignes= array();

public function Tableau($MonHeader, $nbcols)
{
$_Header = '<th colspan="'.$nbcols.'">'.$MonHeader.'</th>';
}

public function AjouterLigne($MesValeursRecues)
{
$UneLigne = new Ligne($MesValeursRecues);
array_push($_MesLignes, $UneLigne);
}

public function Finalize()
{
$_MonTableau=$_DebutTab;
foreach ($_MesLignes as &$LigneEnCours)
{
$_MonTableau.=$LigneEnCours->Finalize();
}
$_MonTableau.=$_FinTab;
}

public function Show()
{
echo $_MonTableau;
}

public function Resultat()
{
return $_MonTableau;
}
}

class Ligne
{
private $_MaLigne="";
private $_DebLigne="<tr>";
private $_FinLigne="</tr>";
private $_MesColonnes=array();

public function Ligne($MesColonnesRecues)
{
foreach ($MesColonnesRecues as &$UneColonne)
{
$NouvelleColonne = new Colonne($UneColonne);
array_push($_MesColonnes, $NouvelleColonne);
}
}

public function Finalize()
{
$_Maligne=$_DebLigne;
foreach($_MesColonnes as &$ColonneEnCours)
{
$_Maligne.=$ColonneEnCours->Finalize();
}
$_Maligne.=$_FinLigne;

return $_MaLigne;
}
}

class Colonne
{
private $_MaColonne="";
private $_DebutCol="<td>";
private $_FinCol="</td>";

public function Colonne($MaColonneRecue)
{
$_MaColonne=$_DebutCol.$MaColonneRecue.$_FinCol;
}

public function Finalize()
{
return $_MaColonne;
}
}

?>

Ça c'est le fichier à inclure...

et voila un exemple de son utilisation :

<?php

echo'
Début MonTableau
';
$UnHeader = "Mon Tableau";
$UnHeaderColSpan = 3;

$UnTableau = new Tableau($UnHeader, $UnHeaderColSpan);
$arrLigne1 = array("Ligne1 Colonne1", "Ligne1 Colonne2", "Ligne1 Colonne3");
$UnTableau->AjouterLigne($arrLigne1);
$arrLigne2 = array("Ligne2 Colonne1", "Ligne2 Colonne2");
$UnTableau->AjouterLigne($arrLigne2);
$UnTableau->Finalize();
$UnTableau->Show();
echo'
Fin MonTableau';

?>

Le tableau ne s'affiche pas, aurais je oublié quelque chose?
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
23 févr. 2011 à 13:53
"C'est paradoxal de dire que le php est pas ton langage de prédilection mais plutôt le C# et que la notion d'objet est encore obscure vu que le C# est un langage objet et le php le deviens petit a petit mais bon ^^"

Je ne dis pas que la POO est obscur, juste que je ne maitrise pas encore tout de l'objet et je suis loin de connaitre chacun des DP (Design Pattern)

Enfin je me débrouille mieux en C# qu'en php.... ;)
cs_fenoril Messages postés 23 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 12 juin 2011
23 févr. 2011 à 13:13
Salut !

C'est toujours sympa d'automatiser un peu les codages, bonne idée de fainéant, donc de codeur...

Je par ailleurs particulièrement d'accord avec morphinof, pour la POO et la forme basée sur un tableau php (on va souvent tirer les infos d'une bdd, et donc on a une mise en correspondance assez facile à faire en amont).

A ajouter aux critiques, les balises html center et font color que tu as choisi sont dépréciées et en cours de disparition.

La critique seule n'étant pas le but, deux idées pour régler le problème :
Soit que ces fonctions (center et fontcolor)envoient des span avec un style : Reste souple d'utilisation, mais pas parfait côté séparation contenu/mise en forme.
Soit que ces fonctions envoient des span avec des classes définies dans un css : Plus limitant (car il faut une classe par couleur), mais plus respectueux de la séparation.

Amicalement,
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
23 févr. 2011 à 12:22
Pour preciser ca donnerai un traitement comme ca :

$html = '';

foreach ($this->tab as $row)
{
$html .= '<tr>';
foreach ($row as $col => $data)
{
$html .= '<td>'.$data.'</td>';
}
$html .= '</tr>';
}

Enfin un truc du genre.
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
23 févr. 2011 à 12:19
C'est paradoxal de dire que le php est pas ton langage de predilection mais plutot le C# et que la notion d'objet est encore obscure vu que le C# est un langage objet et le php le deviens petit a petit mais bon ^^

Pour le nom des variables je prefere choisir anglais comme ca tout le monde peu comprendre mais bon le principal c'est que ce soit coherent quelque soit la langue.

Sinon pour ta conception elle est a mon avis trop lourde meme si elle est plutot coherente, en effet si tu cree un objet qui contient une une liste d'objet ligne contenant lui meme une liste d'objet colone et que tu t'en sert que pour ca l'interet est limite.
Si sa s'applique a plusieurs type d'objets different la ca pourrai etre bien mais a ta place je me simplifirait la vie et je ferais un objet Tableau qui contient un tableau associatif du genre :

private $tab = array( tableau_de_ligne(tableau_de_colones()) );

Il te suffira de le parcourir correctement pour generer ton tableau html, c'est bien moins lourd et ca aura le meme effet pour moins de travail.

Bonne continuation !
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
23 févr. 2011 à 11:13
Ps : j'ai oublié de préciser que le php n'est pas mon langage de prédilection (c'est plutôt le C#)...

Bonne journée/Soirée (c'est selon...)
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
23 févr. 2011 à 11:11
Merci pour toutes ces remarques, je suis en BTS je le rappelle : ca ne fais que 4 moi que j'ai compris la notion d'objet c'est pas encore ultra clair pour moi...

De plus il ne me reste pas énormément de temps avant la fin de mon stage du coup je suis allé au plus rapide mais une mise a jour est prévu pour corriger un peu cela.

au final un objet tableau aura donc comme attribut un header et sera un manager d'objets de type ligne qui seront eux même des managers de colonnes

un objet colonne (appartenat donc à une ligne) contiendront des strings

pour ce qui est des noms de variables en franglais c'est une idée de mon prof qui nous a appris a faire comme ca pour reconnaitre nos objets...

corrigez moi si je me trompe...

enfin je le répète, je reste ouvert à tous conseils et toutes remarques! :)
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
23 févr. 2011 à 09:38
Je rejoins les deux premiers commentaires, si tu veux ecrire une abstraction HTML il faut penser objet et voir un peu plus large, une de mes sources pourrai t'inspirer sur ce sujet : http://www.phpcs.com/codes/ABSTRACTHTML-GENERATOR_51916.aspx

Bon courage et bonne continuation
Utilisateur anonyme
22 févr. 2011 à 23:22
SAlut.
D'accord avec phpAnonyme.
De plus j'ai veux deux choses qui me dérange beaucoup :
- les balises HTML en minuscule, histoire de suivre les standards.
- nomme tes variables soit tout en anglais, soit tout en français mais ne mélange pas. "MaNewString"....

Bonne continuation
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
22 févr. 2011 à 15:32
lut,

Première contrib, bon ok!
Sinon, ben je pense que le concept d'objet et d'encapsulation t'échappe ! Car là tu n'a mis qu'un ensemble de fonctions dans une classe. Y a mieux à faire.
Rejoignez-nous