composant ajout du seconde vue en front

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

  • composant ajout du seconde vue en front

    Bonjour,

    Sous joomla 4, j'ai créé un composant com_xxx de type MVC qui affiche en front une vue A à partir de champs extraits d'une table propre à ce composant. Cela fonctionne normalement tant en back qu'en front.

    Je voudrais créer une seconde vue B en front.

    Modifications apportées dans les sous-répertoires de com_xxx / site / src :
    . Model : création d'un ficher BModel réplique du AModel, la CLASS étant modifiée de AModel en BModel
    . View : création d'un sous-répertoire B réplique du A incluant un ficher HtmlView, dont le NAMESPACE est désormais Joomla\Component\xxx\Site\View\B

    Modifications apportées dans le sous-répertoire de com_xxx / site / tmpl, création d'un sous-répertoire B réplique du A incluant :
    . Default.php : identique au DEFAULT.PHP du sous-répertoire A
    . Default.xml : identique au DEFAULT.XML du sous-répertoire A

    Je suppose qu'il faut updater la CLASS du fichier com_xxx / site /src / Controller / DisplayController.php

    Questions :
    . La démarche est-elle correcte ?
    . Si oui, comment paramétrer ce DisplayController.php ?
    . Si non, quelle est la démarche à suivre ?
    ​​
    Merci de votre aide

    Très cordialement

    Philippe

  • #2
    J'ai un peu avancé sur pour l'affichage de la seconde vue via le fichier components / Xxxxx / src / Controller / DisplayController en ayant l'appel d'une vue par DEFAUT et une autre spécifique à l'appel de ma seconde vue.

    Autant pour la vue par défaut, cela fonctionne normalement, autant pour la deuxième vue, j'ai le message d'erreur suivant :
    Affichage introuvable [name, type, prefix] : bxxxx, html, site

    Mon code :

    Code HTML:
    <?php
    
    namespace Joomla\Component\Xxxxx\Site\Controller;
    
    defined('_JEXEC') or die;
    
    use Joomla\CMS\MVC\Controller\BaseController;
    use Joomla\CMS\Router\Route;
    use Joomla\CMS\Session\Session;
    
    
    class DisplayController extends BaseController
    {
    
    public function display($cachable = false, $urlparams = array())
    {
        $view = $this->input->get('view', 'default');
    
        switch ($view) {
          
          case 'bxxxx':
                // Seconde vue Bxxxx
                $view = $this->input->get('bxxxx', 'default');
                parent::display($cachable, $urlparams);
                break;
    
            default:
                // Vue initiale par défaut
               parent::display($cachable, $urlparams);
                break;
        }
    }
    
    }​
    D'où peut bien provenir cette erreur ?

    Merci d'avance

    Très cordialement

    Philippe





    Commentaire


    • #3
      Hello.

      Normalement tu n'as besoin d'un controlleur que pour gerer le retour d'une vue (pour gérer les choix d'une form html).

      Dans les autres cas tu n'as pas besoin d'un controleur spécifique.

      Ton code ne sert pas à grand chose.
      Dans le cas la vriable $view n'est pas utilisée, et le reste des ligne est identique au default.

      Le message d'erreur indique qu'il ne trouve pas le fichier ou la classe de ta vue.

      Tu est sur d'avoir en dossier /src/View/Bxxxx avec un fichier HtmlView.php et le bon namespace ?
      A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
      Rejoignez le Joomla Users Groupe Alsace...
      roland_d_alsace va-t-il devenir roland_du_grand_est ?

      Commentaire


      • #4
        Bonjour Roland,

        Merci de ton retour.

        J'ai reconfiguré le fichier components / com_daglink / src / Controller / DisplayController.php comme suit :

        Code HTML:
        <?php
        
        namespace Joomla\Component\Daglink\Site\Controller;
        
        defined('_JEXEC') or die;
        
        use Joomla\CMS\MVC\Controller\BaseController;
        use Joomla\CMS\Router\Route;
        use Joomla\CMS\Session\Session;
        
        
        class DisplayController extends BaseController
        {
            /**
             * The default view.
             *
             * @var    string
             * @since  1.6
             */
            protected $default_view = 'aaaa';
        
            protected $app;
        }
        ?>

        J'ai bien un sous-répertoire Bxxxx comportant un seul fichier HtmlView.php qui reprend intégralement et exclusivement le script du Aaaa / HtmlView.php (namespace Joomla\Component\Daglink\Site\View\Aaaa​ , à l'exception du namespace qui est pour le B :
        namespace Joomla\Component\Daglink\Site\View\Bxxx;

        Avec ces paramètres, en front la page A apparaît normalement.

        Par contre, pour la page B (qui théoriquement devrait appeler une page identique à la page A), le message d'erreur est
        Affichage introuvable [name, type, prefix]&#160;: listea, html, site

        Par ailleurs, en mode debug, l'appel bloquant est
        JROOT/libraries/src/MVC/Controller/BaseController.php:837

        ​Qu'en penses-tu ?

        Philippe

        Commentaire


        • #5
          Listea correspond au Bxxxx

          Commentaire


          • #6
            Listea correspond au Bxxxx

            Commentaire


            • #7
              Pourquoi tu parles en langage "codé", le nom de la vue c'est Listea ou Bxxxx ?

              Vu l'erreur c'est bien l'affichage (la vue) listea au format html qui n'est pas trouvée.
              C'est bien la vue que le contrôleur essaie d'ouvrir.
              A mon avis le contrôleur est hors de cause.

              Inspire toi de com_contact par exemple.

              De + ton namespace ne devrait pas commencer par Joomla qui est reservé au core mais par un identifiant qui t'est propre (nom de société ou autre). Mais le problème ne vient pas de là.
              Voir : https://www.dionysopoulos.me/book/co...spaces-j4.html
              Dernière édition par roland_d_alsace à 16/01/2024, 12h26
              A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
              Rejoignez le Joomla Users Groupe Alsace...
              roland_d_alsace va-t-il devenir roland_du_grand_est ?

              Commentaire


              • #8
                Bonjour Roland,

                Merci pour les infos.

                J'ai trouvé mon erreur.

                Le sous-répertoire "listea" inclut dans la vue doit s'écrire avec une majuscule, soit "Listea".

                Et là, la vue apparaît.

                Merci encore de ton aide.

                Très cordialement

                Philippe

                Commentaire


                • #9
                  Oui.

                  Voir la structure des dossiers et les endroits où il faut mettre des majuscules :
                  Personal blog of Nicholas Dionysopoulos. I say what I mean and I mean what I say.


                  De +, il faut faire gaffe quand on développe sous Wamp.
                  Sous windows majuscule ou minuscules cela fonctionne, mais en prod pour les serveurs sous linux les majuscules et les minuscules c'est pas pareil.
                  Depuis j4 et les "namespace" je suis passé sous ubuntu pour développer, cela devenant trop "casse gueule" de développer sous Windows.
                  A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                  Rejoignez le Joomla Users Groupe Alsace...
                  roland_d_alsace va-t-il devenir roland_du_grand_est ?

                  Commentaire

                  Annonce

                  Réduire
                  Aucune annonce pour le moment.

                  Partenaire de l'association

                  Réduire

                  Hébergeur Web PlanetHoster
                  Travaille ...
                  X