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 :

[POO] Séparer la forme du fond


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 80
    Points
    80
    Par défaut [POO] Séparer la forme du fond
    Bonjour,

    Voici la suite d'un problème que j'explique dans un mauvais endroit de ce forum :-)

    Tout d'abord le code :

    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
     
    class Section {
     
    	private $resultSection;
     
    	function genererSection($endroit, $langue, $menu, $section) {
    		$db = new ConnectDB();
     
    		$select = "SELECT section_c.nom AS nom, section.url AS url, section.ordre AS ordre FROM section, statut, endroit, menu, 
    		section_c, langue
    			WHERE section.statut = statut.id
    			AND statut.statut = 'OK'
    			AND section.endroit = endroit.id
    			AND endroit.endroit = '".$endroit."'
    			AND section_c.langue = langue.id
    			AND langue.code = '".$langue."'
    			AND section.menu = menu.id
    			AND menu.id = '".$menu."'
    			AND section_c.section = section.id
    			AND section.section != '".$section."'
    			ORDER BY section.ordre ASC";
    		$db -> query("$select");
     
    		while ($result = mysql_fetch_array($db -> query, MYSQL_ASSOC)) {
    			$resultSection[] = array($result['nom'] => $result['url']);
    		}
     
    		return $resultSection;
    	}
     
    }
    Cette fonction, inclue dans une classe, va rechercher une liste de section (des liens de menu en fait) et retourne le nom et l'URL de ces liens dans un tableau nommé $resultSection.

    Cette fonction termine par retourner ce tableau.

    Ma question ... J'aimerai maintenant savoir comment puis-je faire pour instancier cet classe dans un fichier menugauche.php et faire en sorte de pouvoir afficher ces différents liens selon ce que je désire.

    En gros, j'ai pas envie de faire des echo dans la fonction même car cela m'empêcherait de pouvoir ré-utiliser cette classe dans différents sites.

    Qs peut m'aider ?

    Merci :-)

    Cette

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Points : 186
    Points
    186
    Par défaut
    Je ne suis pas sur du tout mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $ThisMenu = New Section();
    $ResultMenu = $ThisMenu->genererSection('Paris','fr','gauche','principale');//ne sachant pas ce que tu voulais mettre j'ai mis au pif
     
     
    for($i=0;$i<=count($ResultMenu);$i++)
    {
    //Affichage des données
    }
     
    ?>

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Hmm je suis pas sur d'avoir saisi ta problématique.

    Sinon peut etre une intégration comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ma_section = new Section();
    //replacer endroit,langue,menu et section par ce dont tu as besoin.
    $menu=$ma_section->genererSection($endroit, $langue, $menu, $section) ;
    foreach($menu as $lib=>$lien){
      echo '<a href="'.$lien.'">'.$lib.'</a>';
    }

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 80
    Points
    80
    Par défaut
    Génial !

    Merci :-)

    En adaptant un peu le code fourni, j'ai déjà franchi une belle étape ! Voici le code final actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $section = new Section();
     
    $menu = $section -> genererSection("public", $session -> lireCodeLangue(), "1", $session -> sectionCourante());
     
    foreach ($menu as $valeur) {
    	foreach($valeur as $nom => $url) {
    		echo '<a href="'.$url.'">'.$nom.'</a>';
    	}
    }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 80
    Points
    80
    Par défaut
    Et voici le code final de menugauche.php :

    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
     
    $menu = new Menu();
    $session = new Session();
    $menu = new Menu();
    $section = new Section();
     
    $lesMenus = $menu -> genererMenu("public", $session -> lireCodeLangue(), "gauche");
     
    foreach ($lesMenus as $valeur) {
    	foreach($valeur as $id => $titre) {
    		echo '<h4>'.$titre.'</h4>';
     
    		$liens = $section -> genererSection("public", $session -> lireCodeLangue(), $id, $session -> sectionCourante());
     
    		foreach ($liens as $valeur) {
    			echo '<ul>';
    			foreach($valeur as $nom => $url) {
    				echo '<li><a href="'.$url.'">'.$nom.'</a></li>';
    			}
    			echo '</ul>';
    		}
    	}
    }
    Avec la classe Section qui ressemble à ceci :

    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
     
    class Section {
     
    	private $resultSection;
     
    	function genererSection($endroit, $langue, $menu, $section) {
    		$db = new ConnectDB();
     
    		$select = "SELECT section_c.nom AS nom, section.url AS url, section.ordre AS ordre FROM section, statut, endroit, menu, 
    		section_c, langue
    			WHERE section.statut = statut.id
    			AND statut.statut = 'OK'
    			AND section.endroit = endroit.id
    			AND endroit.endroit = '".$endroit."'
    			AND section_c.langue = langue.id
    			AND langue.code = '".$langue."'
    			AND section.menu = menu.id
    			AND menu.id = '".$menu."'
    			AND section_c.section = section.id
    			AND section.section != '".$section."'
    			ORDER BY section.ordre ASC";
    		$db -> query("$select");
     
    		while ($result = mysql_fetch_array($db -> query, MYSQL_ASSOC)) {
    			$resultSection[] = array($result['nom'] => $result['url']);
    		}
     
    		return $resultSection;
     
    		unset($db);
    	}
     
    }
    Et la classe Menu qui ressemble à ceci :

    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
     
    $menu = new Menu();
    $session = new Session();
    $menu = new Menu();
    $section = new Section();
     
    $lesMenus = $menu -> genererMenu("public", $session -> lireCodeLangue(), "gauche");
     
    foreach ($lesMenus as $valeur) {
    	foreach($valeur as $id => $titre) {
    		echo '<h4>'.$titre.'</h4>';
     
    		$liens = $section -> genererSection("public", $session -> lireCodeLangue(), $id, $session -> sectionCourante());
     
    		foreach ($liens as $valeur) {
    			echo '<ul>';
    			foreach($valeur as $nom => $url) {
    				echo '<li><a href="'.$url.'">'.$nom.'</a></li>';
    			}
    			echo '</ul>';
    		}
    	}
    }
    Et ça fonctionne parfaitement :-)

    Grâce à cela, je pourrai très facilement créer des menus dynamiques, dans différents sites et dans différents endroits de site, en pouvant adapter la forme comme je le désire sans devoir chipoter au moteur qui génère le menu :-)

    Merci encore !

  6. #6
    Membre régulier Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Points : 97
    Points
    97
    Par défaut
    Juste en passant et histoire d'être désagréable, quel intérêt de faire une classe dans ton cas ? Une simple fonction aurait suffit non ?
    Si tu tiens à faire de la POO, crée une méthode dans ta classe qui va te créer ton HTML et récupère tes menus avec un mysql_fetch_object, ou mieux tu crée tes propres objets menus qui vont générer ton HTML.

    Et ça :
    Grâce à cela, je pourrai très facilement créer des menus dynamiques, dans différents sites et dans différents endroits de site, en pouvant adapter la forme comme je le désire sans devoir chipoter au moteur qui génère le menu :-)
    C'est plus ou moins ce pour quoi on utilise des CSS, non ?

    Objectivement, à cet instant, ça manque de classe ton interface !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 80
    Points
    80
    Par défaut
    Effectivement, tu n'as pas tout à fait tort ...

    Par contre, quel est l'intérêt de générer l'HTML dans une classe ? Si on le fait comme cela, je devrai systématiquement aller modifier les classes pour les adapter au site non ?

  8. #8
    Membre régulier Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Points : 97
    Points
    97
    Par défaut
    Non, puisque tu génère le strict minimum soient des <ul> et des <li>, tout le reste se fait dans le css. Et si vraiment tu peux spécifier quelques propriétés de ton menu dans les variables de ta classe. Le tout c'est de bien séparer la structure (XHTML) de la mise en page (CSS), si tes styles sont bien faits tu ne devrais pas avoir à retoucher le générateur d'HTML qui doit rester le plus simple possible.

    Idéal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ul class="main_menu">
      <li>menu1</li>
      <li>menu2</li>
      <li>menu3</li>
    <ul>
    point barre. C'est un peu laborieux pour le rendre compatible avec i-euh mais c'est faisable.

    Bon courage

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

Discussions similaires

  1. [POO] Changer la couleur de fond d'une ligne de tableau
    Par guidav dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 30/04/2008, 15h27
  2. [Mise en forme] formulaire fond d application
    Par J_Yohan dans le forum IHM
    Réponses: 12
    Dernier message: 02/05/2007, 15h45
  3. [POO] changer la couleur de fond d'un champ formulaire
    Par LeXo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/03/2007, 09h08
  4. [HTML]Newsletter forme et fond
    Par Chronax dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/06/2006, 12h57
  5. [POO] Changer la couleur de fond d'un tableau
    Par Netoman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2004, 20h12

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