IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Classe PHP et html


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 }?>

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Par défaut
    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 !

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    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

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  6. #6
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    En sortant du php.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. HTML dans PHP, PHP dans HTML...
    Par jeremy_chauvel dans le forum Langage
    Réponses: 3
    Dernier message: 24/04/2006, 20h28
  2. Appeler une fonction d'un script PHP depuis HTML
    Par barthelv dans le forum Langage
    Réponses: 31
    Dernier message: 27/12/2005, 11h25
  3. Formulaires ? PHP ou HTML ?
    Par ghyosmik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 15/11/2005, 10h22
  4. [Class/PHP/Postgres] Problème de modélisation...
    Par k-reen dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 27/02/2003, 08h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo