Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2007, 13h01   #1
Nouveau Membre du Club
 
Inscription : mai 2002
Messages : 57
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 57
Points : 25
Points : 25
Envoyer un message via MSN à Maryy
Par défaut Classe PHP et html

Bonjour,

J'avais créé mon site internet sans utiliser l'orienté objet. Aujourd'hui c'est une notion qui m'intéresse car je voudrais me mettre à la programmation orientée objet et c'est pour moi un bon exercice que de m'entraîner sur mon site perso.

J'ai parcouru quelques doc mais peut-être pas assez en détail, n'hésitez pas à me donner un lien à consulter si ça peut me corriger. Dites-moi si je fais fausse route également.

J'ai créé une classe page() qui gère l'affichage des différentes rubriques. La première méthode est appelée pour afficher les news. La deuxième pour afficher les menus de la page à gauche.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
class page {
	var $titre;
	var $idPere;
	var $idPage;
 
	function affNews() {
		$strSQL = "SELECT idNews, titreNews, news, imgNews FROM news ORDER BY idNews DESC LIMIT 3";
		$resultat = reqSQL($strSQL);
 
		while($tabl_result=mysql_fetch_array($resultat)){
			echo "<TABLE width='100%' border='0' cellspacing='0' cellpadding='0'>
				<TR><TD><TABLE width='100%' border='0' cellspacing='0' cellpadding='0'>
				<TR><TD width='11'><IMG src='images/tit1.gif' width='11' height='34'></TD>
					<TD background='images/tit2.gif' class='tit'>" .$tabl_result['titreNews']. "</TD>
					<TD width='14'><IMG src='images/tit3.gif' width='14' height='34'></TD>
				   </TR>
				</TABLE></TD>
				</TR>";
			echo"<TR><TD class='txt2'><DIV style='text-align:justify'>".nl2br($tabl_result['news']). "</DIV></TD></TR>
				</TABLE><BR/>" ;
		} // while
	}
 
	//affiche les menus
	function affMenu($idpage) {
		include_once "./fonctions.php";
		//sélectionne toutes les pages filles de la page en cours
		$strSQL = "SELECT idPage, nomMenu FROM page WHERE idParent = ".$idpage;
		$resultat = reqSQL($strSQL);
 
		//si la page n'a pas de fille, alors on modifie la requete pour obtenir ses pages soeurs
		if (mysql_num_rows($resultat) == 0) {
			$strSQL = "SELECT idPage, nomMenu FROM page WHERE idParent = " .$_ENV['idParent'];
			$resultat = reqSQL($strSQL);
		}
		$menuRetour = "";
 
		//etant donné qu'on a une page différente pour l'index et pour l'admin, il faudra afficher les bons menus
		//pour cela on teste l'idPage et on définit l'url en fonction.
		$url="";
		if ($_ENV['idPage'] <100){ $url="index.php"; }
		else {$url="admin.php";}	
 
		while ($tabl_result = mysql_fetch_array($resultat)) {
			$menuRetour  .= "<TR><TD width='20'><IMG src='images/puce.gif' width='18' height='18'></TD>";
            $menuRetour .= "<TD width='145'><A href='".$url."?idPage=".$tabl_result['idPage']."' class='link0'>";
			$menuRetour .= $tabl_result['nomMenu'];
			$menuRetour .= "</A></TD></TR>";
		}
		return $menuRetour;
	}
}
Ce qui me "dérange" c'est le fait d'avoir du html dans une méthode, je sais pas si j'ai bien fait ? J'espère que c'est pas trop le bazar le fait d'avoir copier-coller le code comme ça.

Merci à vous !
Maryy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 22h48   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
tu as raison d'être "dérangée" parce qu'il vaut mieux séparer le traitement des données et la présentation des données

en gros tu pourrais faire quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
class Page {
 
    function affNews() {
        $listeNews = $this->calculListeNews();
 
        include 'affichageNews.php';
    }
 
    function calculListeNews() {
        // ...
        return $listeNews;
    }
et dans le fichier affichageNews.php
Code html :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php foreach ($listeNews as $news) {?>
    <TABLE width='100%' border='0' cellspacing='0' cellpadding='0'>
        <TR>
            <TD>
                <TABLE width='100%' border='0' cellspacing='0' cellpadding='0'>
                    <TR>
                        <TD width='11'><IMG src='images/tit1.gif' width='11' height='34'></TD>
                        <TD background='images/tit2.gif' class='tit'><?php echo $news->getTitre();?></TD>
                        <TD width='14'><IMG src='images/tit3.gif' width='14' height='34'></TD>
                    </TR>
                </TABLE>
            </TD>
        </TR>
        <TR>
            <TD class='txt2'><DIV style='text-align:justify'><?php echo $news->getTexte();?></DIV></TD>
        </TR>
    </TABLE>
    <BR/>
<?php }?>
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2007, 10h30   #3
Nouveau Membre du Club
 
Inscription : mai 2002
Messages : 57
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 57
Points : 25
Points : 25
Envoyer un message via MSN à Maryy
Ah il me semblait bien que c'était pas terrible mon affaire ! Je te remercie pour ta réponse, ça m'a pas mal travaillée. Je vais faire comme tu me conseilles. Merci merci !
Maryy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2007, 12h43   #4
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Pour moi je ne vois aucun problème dans ton code. si tu as des classes/méthodes d'affichage, c'est normal qu'elles affichent quelque chose (et donc ici du html).
Personnellement, et sans connaitre plus en détail le reste de ton projet, je ne toucherais rien.
Au mieux je ferais un mixte entre ton premier code et la proposition de mathieu :
- pas d'include d'un fichier externe
- pas de création de méthode supplémentaire
- mais, éventuellement, remplacement des longs echo par du code html
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2007, 18h31   #5
Nouveau Membre du Club
 
Inscription : mai 2002
Messages : 57
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 57
Points : 25
Points : 25
Envoyer un message via MSN à Maryy
Merci Mr. N pour ces autres conseils. Je ne comprends ce que signifie "remplacer les longs echo par du code html". Concrètement, comment devrais-je écrire cette boucle en évitant mon long echo :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
while($tabl_result=mysql_fetch_array($resultat)){
			echo "<TABLE width='100%' border='0' cellspacing='0' cellpadding='0'>
				<TR><TD><TABLE width='100%' border='0' cellspacing='0' cellpadding='0'>
				<TR><TD width='11'><IMG src='images/tit1.gif' width='11' height='34'></TD>
					<TD background='images/tit2.gif' class='tit'>" .$tabl_result['titreNews']. "</TD>
					<TD width='14'><IMG src='images/tit3.gif' width='14' height='34'></TD>
				   </TR>
				</TABLE></TD>
				</TR>";
			echo"<TR><TD class='txt2'><DIV style='text-align:justify'>".nl2br($tabl_result['news']). "</DIV></TD></TR>
				</TABLE><BR/>" ;
		} // while
Merci à vous !
Maryy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2007, 20h03   #6
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
En sortant du php.

Code html :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while($tabl_result=mysql_fetch_array($resultat)){
?>
<TABLE width='100%' border='0' cellspacing='0' cellpadding='0'>
  <TR><TD><TABLE width='100%' border='0' cellspacing='0' cellpadding='0'>
  <TR><TD width='11'><IMG src='images/tit1.gif' width='11' height='34'></TD>
 <TD background='images/tit2.gif' class='tit'>
<?php echo $tabl_result['titreNews'] ?>
 </TD>
 <TD width='14'><IMG src='images/tit3.gif' width='14' height='34'></TD>  </TR>
</TABLE></TD>
</TR>
<TR><TD class='txt2'><DIV style='text-align:justify'><?php echo nl2br($tabl_result['news']) ?>
</DIV>
</TD>
</TR>
</TABLE><BR/>
<?php
}

Bon après, je sais pas si côté perf, c'est vraiment visible.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2007, 20h07   #7
Nouveau Membre du Club
 
Inscription : mai 2002
Messages : 57
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 57
Points : 25
Points : 25
Envoyer un message via MSN à Maryy
En tout cas ça me parait nettement plus visible en effet. Ok je vais faire ça !
Merci merci !
Maryy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2007, 20h26   #8
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par Xunil
Bon après, je sais pas si côté perf, c'est vraiment visible.
Tu y gagnes forcément car php n'a pas à faire de concaténation de chaine
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h25.


 
 
 
 
Partenaires

Hébergement Web