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 :

[MVC] Partie variable sur toutes les vues


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Points : 78
    Points
    78
    Par défaut [MVC] Partie variable sur toutes les vues
    Bonjour,

    ( c'est encore moi )

    Voici mon questionnement.

    J'aimerais instaurer une partie variable sur mon gabarit au niveau de l'identification.

    Voici mon gabarit actuel :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    <!doctype html>
    <html lang="fr">
      <head>
        <meta charset="UTF-8" />
    	<base href="<?= $racineWeb ?>" >
    	<!--[if lt IE 9]>
    		<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
        <link rel="stylesheet" href="Contenu/style.css" />
        <title><?= $titre ?></title>
      </head>
      <body>
        <div id="global">
    		<header>
    			<div id="divspace">
     
    			</div>
    			<div id="divlogo">
    				<img id="logo" src="Contenu/logo.png" alt="banniere" />
    			</div>
    			<div id="divloggin">
    				<div id="logginbox">
    					<form id="logginform">
    						<div id="loggindata">
    							<label id="lblogginUser">Utilisateur :</label><input type="text"/><br/>
    							<label id="lblogginMdp">Mot de passe :</label><input type="password"/>
    						</div>
    						<input type="submit"/>
    					</form>
    					<a href="inscription">Inscription</a>
    					<a href="RecuperationPassword">Mot de passe oublié?</a>
    				</div>
    			</div>
    		</header>
    		<nav>
    			<ul>
    				<li><a <?php if($idpage=="accueil"){ echo 'id="page_en_cours"'; } ?> href="accueil">Accueil</a></li>
    				<li><a <?php if($idpage=="leclub"){ echo 'id="page_en_cours"'; } ?> href="leclub">Le club</a></li>
    				<li><a <?php if($idpage=="entrainements"){ echo 'id="page_en_cours"'; } ?> href="entrainements">Entrainements</a></li>
    				<li><a <?php if($idpage=="calendrier"){ echo 'id="page_en_cours"'; } ?> href="calendrier">Calendrier</a></li>
    				<li><a <?php if($idpage=="listedeforce"){ echo 'id="page_en_cours"'; } ?> href="listedeforce">Liste de force</a></li>
    			</ul>
    		</nav>
    		<div id="main">
    			<section class="publicites">
    			</section><!-- @whitespace
    		 --><section id="page">
    				<div id="entete">
    					<h1><?= $entete ?></h1> 
    				</div>
    				<div id="contenu">
    					<?= $contenu ?> 
    				</div>
    			</section><!-- @whitespace
    		 --><section class="publicites">
    			</section>
    		</div>
    		<footer>
    			<div>
    				<a href="administration.php">Admininistration</a>
    			</div>
    		</footer>
        </div> 
    	<script src="Contenu/monScript.js"></script>
    	<script src='https://www.google.com/recaptcha/api.js?hl=fr' async defer></script>
      </body>
    </html>
    J'aimerais que le contenu de mon div divloggin soit dynamique, c'est à dire qu'il varie en fonction que l'utilisateur soit loggué ou non.
    Si l'utilisateur n'est pas loggué, ce sera le formulaire d'identification qui s'afficherait.
    Sinon ce sont des liens vers son profil, etc...

    ce qui me vient à l'esprit de remplacer le contenu du div divloggin par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?= $div_identification ?>
    et de gérer le contenu de $div_identification dans ma classe Vue.

    Est-ce une bonne manière de faire ou dois-je définir le contenu dans chaque vue comme je le fait pour chaque autre variable comme dans l'exemple suivant?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php 
    $this->titre="Palette Leuzoise - Information";
    $this->entete="Information";
    $this->idpage="Information";
    ?>
     
    <span>Bonjour <?= $prenom ?></span>
    <p> Votre compte a bien été activé. </p>
    <p> Vous pouvez maintenant vous logguer au site en tant que "membre" <p/>
    <p> Rappel de votre identifiant : <?= $pseudo ?> </p>
    <p> Si vous faites partie des joueurs du club, vos accès seront modifiés dans les plus brefs délais </p>
    <p> Bonne visite et à bientôt </p>
    J'aimerai respecter au mieux l'architecture MVC.

    Merci pour vos avis.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonsoir,
    tu vérifies le statut de l'utilisateur par une variable de session ou une fonction d'authentification.S'il est connecté tu affiches les infos propres à sa session auquel cas tu affiches le formulaire.Schématiquement:

    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
     
     
    <?php if( isset($_SESSION['login']) ): ?>
    <!-- affichage des infos liées à l'utilisateur connecté -->
      <div id="divloggin">
       <p> Vous êtes : <b> <?php echo $_SESSION['nom'] ?> <b> </p>
       <p><a href="deconnexion.php">Deconnexion</a></p>
     </div>
     <!-- utilisateur non connecté, on affiche alors le form de connexion -->
    <?php else: ?>
      <form acion="">
     
      </form>
    <?php endif; ?>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Points : 78
    Points
    78
    Par défaut
    Bonjour Armel18,

    Ne sort-on pas du concept MVC dans ce cas, car on insère de la logique dans les vues?

    Voici ma classe Vue

    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
     
    <?php 
     
    require_once 'Configuration.php';
     
    class Vue
    {
    	private $fichier;
    	private $titre;
    	private $entete;
    	private $idpage;
     
    	public function __construct($action, $controleur = "")
    	{
    		$fichier = "Vue/";
     
    		if($controleur != "")
    		{
    			$fichier = $fichier . $controleur . "/";
    		}
     
    		$this->fichier = $fichier . $action . ".php";
    	}
     
    	public function generer($donnees)
    	{
    		$contenu = $this->genererFichier($this->fichier, $donnees);
    		$racineWeb = Configuration::get("racineWeb","/");
    		$vue = $this->genererFichier('Vue/gabarit.php',array('titre'=>$this->titre,'entete'=>$this->entete, 'contenu'=>$contenu, 'idpage'=>$this->idpage, 'racineWeb' => $racineWeb));
    		echo $vue;
    	}
     
    	private function genererFichier($fichier,$donnees)
    	{
    		if( file_exists($fichier))
    		{
    			if($donnees != null)
    			{
    				extract($donnees);
    			}
    			ob_start();
    			require $fichier;
    			return ob_get_clean();
    		}
    		else
    		{
    			throw new Exception("Fichier '$fichier' introuvable"); 
    		}
    	}
    }
    J'aurais plutôt pensé à modifier ma fonction generer comme 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
     
    public function generer($donnees)
    {
    	$contenu = $this->genererFichier($this->fichier, $donnees);
    	$racineWeb = Configuration::get("racineWeb","/");
     
            $identifiant = $this->requete->getParametre('user_loggue');
            if($identifiant != " ")
            {
                    $div_identification = $this->genererFichier('Vue/divIdentifie'); 
            }
            else
            {
                    $div_identification = $this->genererFichier('Vue/nonIdentifie');
            }
     
    	$vue = $this->genererFichier('Vue/gabarit.php',array('titre'=>$this->titre,'entete'=>$this->entete, 'contenu'=>$contenu, 'idpage'=>$this->idpage, 'racineWeb' => $racineWeb, 'divIdentification'=>$div_identification));
    	echo $vue;
    }
    Es-ce qu'on ne reste pas plus prêt du MVC comme ceci?

    Merci

  4. #4
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Salut,

    Il te manque des concepts communs à la plupart des framework basés sur le principe du MVC. Là, c'est la notion de "layout". Il te manque aussi la notion de "router".

    C'est justement plus formateur à mon sens de chercher à comprendre l'intérêt de ces concepts dans les frameworks existants plutôt qu'essayer de retrouver les bonnes idées qu'ils contiennent.

    Je te conseillerais bien de regarder les documentations sur les controller, view, router de Laravel, CodeIgniter ou encore de Symfony2.

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

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Points : 78
    Points
    78
    Par défaut
    Bonjour Bretus,

    Si bien sûr que j'ai la structure de base, avec routeur, etc...

    Nom : Capture.PNG
Affichages : 266
Taille : 17,7 Ko

    j'ai suivi le tuto de Baptiste Pesquet.

    Il y a juste quelques substilités comme celle-ci où je ne sais pas où je dois le gérer.

    Ma question actuelle est de savoir si je dois gérer mon divloggin dans ma classe controleur mère ou dans ma classe mère vue ou encore dans le contrôleur ou dans la vue de chaque "section" de mon site...

    Logiquement ma classe mère Vue n'aurait pas à devoir prendre cette décision.
    Je partirai donc sur ma classe Controleur.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Points : 78
    Points
    78
    Par défaut
    Hello,

    Voilà j'ai mis cette gestion dans la classe mère Vue

    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
     
    public function generer($donnees)
    	{
    		$contenu = $this->genererFichier($this->fichier, $donnees);
    		$racineWeb = Configuration::get("racineWeb","/");
     
    		if(isset($_SESSION['user_loggue']))		
    		{
    			$divIdentification = $this->genererFichier('Vue/divIdentifie.php',null);
    		}
    		else
    		{
    			$divIdentification = $this->genererFichier('Vue/divNonIdentifie.php',null);		
    		}
     
    		$vue = $this->genererFichier('Vue/gabarit.php',array('titre'=>$this->titre,'entete'=>$this->entete, 'contenu'=>$contenu, 'idpage'=>$this->idpage, 'racineWeb' => $racineWeb, 'divIdentification' => $divIdentification));
    		echo $vue;
    	}
    est-ce que l'intégrité du MVC est conservée? Qu'en pensez-vous?

    Mon but n'est pas non plus de créé un Framework à part entière, juste d'organiser mon code de la meilleure manière qu'il soit.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/06/2013, 16h37
  2. [2.x] Executer du code sur toutes les vues
    Par pmithrandir dans le forum Symfony
    Réponses: 9
    Dernier message: 19/02/2013, 19h29
  3. Menu Android sur toutes les vues
    Par auxiliaire dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 08/09/2011, 15h54
  4. Réponses: 3
    Dernier message: 18/12/2009, 22h03
  5. Réponses: 8
    Dernier message: 05/10/2009, 15h47

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