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 / affichage d'éléments "identiques"


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut MVC / affichage d'éléments "identiques"
    Bonjour,

    Je suis en train de coder un site que j'essaie de faire en objet / MVC (sans framework) histoire d'avoir une architecture un peu organisée et je suis confronté à un souci pour lequel je n'arrive pas à trouver la meilleure solution.

    Ma page principale doit afficher environ 50 éléments dont l'architecture est identique (une photo, du texte, des liens, des outils de mise en favori, like, recommandation) mais dont les données varient.

    Du coup, je serai tenté de faire de la façon suivante :
    - une vue pour l'architecture de ma page principale, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // ouverture div
    <div>
    <h1>page principale</h1>
     
    // fermeture div
    </div>
    - une vue pour un élément, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <div>
    <h1><?php echo $element->titre;?></h1>
    <img src="<?php echo $element->photo;?>">
    <a href=<?php echo $element->lien1;?><?php echo $element->textlien1;?></a>
    <a href=<?php echo $element->lien2;?><?php echo $element->textlien2;?></a>
    <a href=<?php echo $element->lien3;?><?php echo $element->textlien3;?></a>
    </div>
    Au niveau du contrôleur de ma page principale, je serai tenté de faire la chose suivante :
    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
     
     
    class Principale{
     
        function __construct(){
     
            // code pour récupération de éléments à afficher
     
            // affichage
            foreach($elements as $element){
                require('vue_element.php');
            }
     
        }
        require('vue_principale.php');
    }
    mais ce n'est pas la bonne façon de faire car :
    1. le code html de ma vue principale s'affiche après les éléments
    2. si je place le require('vue_principale.php') avant le foreach, les éléments s'afficheront après la fermeture du div de la page principale, alors que je voudrais qu'ils s'affichent entre les balises div de la page principale.

    Bref, je suis un peu perdu...

    J'ai également pensé à faire :
    1. une méthode d'affichage pour les éléments
    2. entre les balises de div dans la vue principale, faire une boucle sur les éléments à afficher et pour chaque éléments faire $element->afficher();

    Mais cette solution m'apparaît moins "MVC" du fait d'une boucle et d'un appel de méthode dans une vue...

    L'un de vous pourrait-il m'aiguiller sur la bonne méthode ?

    Merci de votre aide !

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Il faut utiliser l'output buffering :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function __construct(){ 
        ob_start();
        foreach($elements as $element){
            include 'vue_element.php';
        }
        $elements_html = ob_get_clean();
     
        include 'vue_principale.php';
     }
    Ensuite dans vue_principal.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // ouverture div
    <div>
    <h1>page principale</h1>
    <?php echo $elements_html ?>
    </div>
    </div>

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Merci pour ta réponse...
    C'est la façon de faire habituelle ou c'est un bricolage pour coller à ma situation ? (je dis ça parce que je ne suis pas expert en MVC, mais, néanmoins, je ne l'ai jamais rencontrée)

    merci encore !

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 099
    Points : 4 444
    Points
    4 444
    Par défaut
    Bonjour,
    généralement en mvc, on utilise un moteur de templates(TWIG,...) pour les vues

    et donc la boucle est définie dans la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {% for element in elements %}
        Le joueur {{ element.nom }} habite à  {{ element.lien }}
    {% endfor %}
    on trouve généralement des if, for, foreach...
    par exemple(Blade)
    $moi= ( !== ) ? : ;

  5. #5
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Citation Envoyé par grinder59 Voir le message
    Merci pour ta réponse...
    C'est la façon de faire habituelle ou c'est un bricolage pour coller à ma situation ? (je dis ça parce que je ne suis pas expert en MVC, mais, néanmoins, je ne l'ai jamais rencontrée)

    merci encore !
    C'est la façon de faire habituelle pour effectuer le rendu d'un code et le récupérer dans une variable pour l'utiliser après.

    Contrairement au commentaire ci-dessous, un moteur de template n'est pas du tout nécessaire au pattern MVC. D'ailleurs Zend Framework 2 n'en utilise pas car PHP est lui même un moteur de templating.
    Par contre effectivement il a raison quand il dit que la boucle devrait être définie dans la vue directement.

Discussions similaires

  1. insertion d'élément db avec quotes
    Par hyipicai dans le forum Windows Forms
    Réponses: 7
    Dernier message: 19/10/2007, 07h49

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