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
                              1 sur 2 < >

                              C'est [Réglé] et on n'en parle plus ?

                              A quoi ça sert ?
                              La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                              Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                              Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                              Comment ajouter la mention [Réglé] à votre discussion ?
                              1 - Aller sur votre discussion et éditer votre premier message :


                              2 - Cliquer sur la liste déroulante Préfixe.

                              3 - Choisir le préfixe [Réglé].


                              4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                              2 sur 2 < >

                              Assistance au forum - Outil de publication d'infos de votre site

                              Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                              Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                              Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                              UTILISER À VOS PROPRES RISQUES :
                              L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                              Problèmes connus :
                              FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                              Installation :

                              1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                              Archive zip : https://github.com/AFUJ/FPA/zipball/master

                              2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                              3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                              4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                              5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                              6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                              et remplacer www. votresite .com par votre nom de domaine


                              Exemples:
                              Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/
                              Pour executer le script: http://www..com/fpa-fr.php

                              Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/cms/
                              Pour executer le script: http://www..com/cms/fpa-fr.php

                              En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                              Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                              Voir plus
                              Voir moins
                              Travaille ...
                              X