Compréhension Model -> View

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Compréhension Model -> View

    Bonjour à tous,

    Je suis nouveau sur Joomla, et je suis en train de développer un composant (pour apprendre )
    J'ai donc suivi les tutoriels sur http://docs.joomla.org/.
    Cependant, je cherche quelque chose de précis qui reste sans réponse dans la doc.

    Le but de mon composant (très simpliste) est d'allé chercher des données dans une table et les afficher. ça, j'y arrive:
    http://localhost/Joomla/index.php?option=com_event&id=1 va bien m'afficher la liste de mes données dont l'id = 1 dans la table.

    Ce que je souhaite faire, c'est afficher l'ensemble des lignes de ma table lorsque l'id n'est pas spécifié. Classiquement, un select * suivi d'un foreach fonctionnerait à merveille. Mais voilà avec Joomla, je trouve pas comment faire.

    Voici mon fichier site/views/event/view.html.php:
    Code PHP:
    class EventViewEvent extends JView
    {

        function 
    display($tpl null
        {

            
    $this->description $this->get('Description');
            
    $this->nom_evenement $this->get('NomEvenement');
            
    $this->nom_lieu $this->get('NomLieu');
            
    $this->adresse_rue $this->get('AdresseRue');
            
    $this->adresse_ville $this->get('AdresseVille');
            
    $this->adresse_cp $this->get('AdresseCP');
            
    $this->date_debut $this->get('DateDebut');
            
    $this->date_fin $this->get('DateFin');
            
    $this->heure_debut $this->get('HeureDebut');
            
    $this->heure_fin $this->get('HeureFin');


            if (
    count($errors $this->get('Errors'))) 
            {
                
    JError::raiseError(500implode('<br />'$errors));
                return 
    false;
            }

            
    parent::display($tpl);
        }


    Mon fichier site/models/event.php:
    Code PHP:
    class EventModelEvent extends JModelItem
    {

        protected 
    $id;
        protected 
    $nom_evenement;
        protected 
    $nom_lieu;
        protected 
    $adresse_rue;
        protected 
    $adresse_ville;
        protected 
    $adresse_cp;
        protected 
    $date_debut;
        protected 
    $date_fin;
        protected 
    $heure_debut;
        protected 
    $heure_fin;
        protected 
    $description;
     

        public function 
    getTable($type 'Event'$prefix 'EventTable'$config = array()) 
        {
            return 
    JTable::getInstance($type$prefix$config);
        }

        public function 
    getDescription() 
        {
            if (!isset(
    $this->description)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->description $table->description;
            }
            return 
    $this->description;
        }
        
        public function 
    getNomEvenement() 
        {
            if (!isset(
    $this->nom_evenement)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->nom_evenement $table->nom_evenement;
            }
            return 
    $this->nom_evenement;
        }
        
        public function 
    getNomLieu() 
        {
            if (!isset(
    $this->nom_lieu)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->nom_lieu $table->nom_lieu;
            }
            return 
    $this->nom_lieu;
        }
        
        public function 
    getAdresseRue() 
        {
            if (!isset(
    $this->adresse_rue)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->adresse_rue $table->adresse_rue;
            }
            return 
    $this->adresse_rue;
        }
        
        public function 
    getAdresseVille() 
        {
            if (!isset(
    $this->adresse_ville)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->adresse_ville $table->adresse_ville;
            }
            return 
    $this->adresse_ville;
        }
        
        public function 
    getAdresseCP() 
        {
            if (!isset(
    $this->adresse_cp)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->adresse_cp $table->adresse_cp;
            }
            return 
    $this->adresse_cp;
        }
        
        public function 
    getDateDebut() 
        {
            if (!isset(
    $this->date_debut)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->date_debut $table->date_debut;
            }
            return 
    $this->date_debut;
        }
        
        public function 
    getDateFin() 
        {
            if (!isset(
    $this->date_fin)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->date_fin $table->date_fin;
            }
            return 
    $this->date_fin;
        }
        
        public function 
    getHeureDebut() 
        {
            if (!isset(
    $this->heure_debut)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->heure_debut $table->heure_debut;
            }
            return 
    $this->heure_debut;
        }
        
        public function 
    getHeureFin() 
        {
            if (!isset(
    $this->heure_fin)) 
            {
                
    $id JRequest::getInt('id');
                
    $table $this->getTable();
                
    $table->load($id);
                
    $this->heure_fin $table->heure_fin;
            }
            return 
    $this->heure_fin;
        }


    et enfin mon site/views/event/tmpl/default.php:
    Code PHP:
    <h1><?php echo $this->nom_evenement?></h1>
    <p>Lieu: <?php echo $this->nom_lieu?></p>
    <p>Du: <?php echo $this->date_debut?> au <?php echo $this->date_fin?></p>
    <p>De: <?php echo $this->heure_debut?> a <?php echo $this->heure_fin?></p>
    <p>Adresse: <?php echo $this->adresse_rue?></p>
    <p>Ville: <?php echo $this->adresse_ville?></p>
    <p>Code Postal: <?php echo $this->adresse_cp?></p>
    <p>Description: <?php echo $this->description?></p>

    Merci d'avance pour vos futurs explications.
    Dernière édition par kdelemme à 17/01/2012, 20h17

  • #2
    Re : Compréhension Model -&gt; View

    Personne n'a d'explication? :'(

    Commentaire


    • #3
      Re : Compréhension Model -&gt; View

      Bonjour,

      Dans ton code, ta view se réfère à un enregistrement. Pour avoir une liste, il te faut, dans le contrôleur, rajouter une tâche pour les listes et créer une vue en liste.

      Dans le modèle MVC, une vue correspond à un type de tâche, une vue en liste est différente d'une vue de détail.
      Pas de demande de support par MP.
      S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

      Commentaire


      • #4
        Re : Compréhension Model -&gt; View

        Merci.

        L'ajout de la tâche dans le contrôleur se place dans la méthode display? Il faut que je traite le cas id est nulle et non nulle et que j'appelle une méthode getAll de mon modèle pour obtenir toutes les lignes et je les passe à une vue différente. C'est bien ça?

        Commentaire


        • #5
          Re : Compréhension Model -&gt; View

          Tout dépend de ce que tu veux, s'il s'agit d'un display, ça se traite dans Display
          Et oui, tu détectes tes cas de figure et tu routes vers diverses vues selon les cas.
          Pas de demande de support par MP.
          S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

          Commentaire


          • #6
            Re : Compréhension Model -&gt; View

            Ok je commence à comprendre le fonctionnement.
            Cependant je n'arrive pas à rediriger vers un template en particulier.

            je ne comprends pas ce qu'attend comme parametre la méthode display($tpl);
            imaginons, j'ai un template pour afficher un event en particulier (appelons le voir) et un template pour afficher tous les events (appelons le tous).
            Que dois-je mettre dans $tpl ?

            Merci d'avance

            Commentaire


            • #7
              Re : Compréhension Model -&gt; View

              Regardes par exemple le controller de com_content, sa méthode display.
              Dans ce cas la view sélectionnée est activée dans le controller par un JRequest::setVar('view', $vName)

              Mais ce n'est qu'une manière de faire parmi d'autres.
              Pas de demande de support par MP.
              S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

              Commentaire


              • #8
                Re : Compréhension Model -&gt; View

                Je vais regarder ça. Merci pour ta rapidité

                Commentaire


                • #9
                  Re : Compréhension Model -&gt; View

                  J'ai finalement trouvé une méthode plus simple que celle utilisé dans com_content.
                  Dans ma view, je met $tpl à null s'il y a un id en particulier et le tmpl/default.php sera appelé. Sinon je met $tpl = "list", et le tmpl/default_list.php sera appelé.

                  Merci pour ton aide!

                  Commentaire


                  • #10
                    Re : Compréhension Model -&gt; View

                    C'est une autre méthode possible
                    La logique utilisée dans par com_content devient quasi incontournable dès lors que les vues sont collectionnées et multiples (article, catégorie en blog, featured, liste des catégories, archives, etc)

                    On la retrouve aussi dans les composants complexes (genre petites annonces, avec des dizaines de vues, ou eCommerce). Mais pour les petits composants avec une ou 2 vues, ta solution simple est la plus rapide.
                    Pas de demande de support par MP.
                    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                    Commentaire


                    • #11
                      Re : Compréhension Model -&gt; View

                      Merci de la précision

                      Commentaire


                      • #12
                        Re : Compréhension Model -&gt; View

                        Désolé, mais je suis du genre coupeur de cheveux en 40 dans la longueur
                        Pas de demande de support par MP.
                        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                        Commentaire


                        • #13
                          Re : Compréhension Model -&gt; View

                          Une nouvelle question.
                          J'aimerais pouvoir afficher ma liste de tous mes events sur toutes les pages du site. un peu comme le menu à gauche.

                          Est-ce judicieux d'avoir fait un composant pour ça, ou vaut-il mieux faire un module ?
                          et
                          Est-ce qu'avec un module je pourrais quand même ajouter de nouveaux events en back-office ?

                          Merci d'avance

                          Commentaire


                          • #14
                            Re : Compréhension Model -&gt; View

                            La prochaine fois je ferai un recherche avant de poser la question c'est promis!

                            Apparement il faut d'abord faire un composant, puis un module qui va gérer l'affichage du composant. Mais le composant reste obligatoire si je veux pouvoir administrer mes events en back office.

                            Commentaire


                            • #15
                              Re : Compréhension Model -&gt; View

                              Envoyé par kdelemme Voir le message
                              Est-ce judicieux d'avoir fait un composant pour ça, ou vaut-il mieux faire un module ?
                              Complètes ton composant (qui lui gère les événements, par un module de présentation. Bases toi par exemple sur le mod_latest articles ou similaire, ça te donnera la logique
                              Pas de demande de support par MP.
                              S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X