Charger deux fois un module avec un layout différent sur la même page

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

  • Charger deux fois un module avec un layout différent sur la même page

    Bonjour,
    Je cherche à afficher le même module deux fois (un modume_custom pour tester pour l'instant) avec un layout différent (nommé alt) sur la même page sur Cassiopea sur Joomla!5.1.
    Module 1 : affiche "core" via le backoffice de Joomla avec une position et la bonne affectation de page : OK
    Module 2 : via PHP dans un override (article en l'occurrence mais ca devrai être le même souci dans tout les fichier de templating)
    Mon code commenté
    Code PHP:
    use Joomla\CMS\Helper\ModuleHelper;
    // Charger le module avec l'ID 160      
    $modulealt ModuleHelper::getModuleById('160');    

    // Décoder les paramètres JSON dans un tableau associatif  
    $params json_decode($modulealt->paramstrue);    

    // Modifier le layout du module dans les paramètres
    $params['layout'] = 'alt';    

    // Repasser les paramètres modifiés en JSON  
    $modulealt->params json_encode($params);

    ​ 
    // Rendre le module avec le layout modifié  
    echo ModuleHelper::renderModule($modulealt);
    ​ 
    Le problème vient du fait que l'instance du module est modifié aussi pour le Module 1
    J'ai tenté 2/3 pseudo php pour contourner mais le fianl est toujours le même : le renderModule semble affecter tout les rendus de la page.

    Une idée ?

  • #2
    Souci réglé,
    Comme d'habitude il suffisait de l'écrire pour que j'arrive à formuler la question simplement et à trouver la réponse :
    Il suffisait de cloner l'objet.
    On obtient donc :

    Code PHP:
    use Joomla\CMS\Helper\ModuleHelper;
    // Charger le module original avec l'ID 160      
    $module ModuleHelper::getModuleById('160');    

    //On clone l'objet $module pour ne pas affecter ses paramètres par la suite
     
    $modulealt = clone $module ;

    // Décoder les paramètres JSON dans un tableau associatif  
    $params json_decode($modulealt->paramstrue);    

    // Modifier le layout du module dans les paramètres
    $params['layout'] = 'alt';    

    // Repasser les paramètres modifiés en JSON  
    $modulealt->params json_encode($params);

    ​ 
    // Rendre le module avec le layout modifié  
    echo ModuleHelper::renderModule($modulealt);
    ​ 
    N'étant pas un grand codeur, n'hésitez pas à me dire si mon approche pause des pb de sécu, perf etc...
    herve aime ceci.

    Commentaire


    • #3
      salut,
      perso j'aurais fait comme ceci
      1 ) création de la surcharge du module dans le dossier html du template
      2) création de 2 modules identique
      3) choix de la surcharge dans les paramètres de mise en page du second module (elle doit apparaitre).
      4) publication des modules dans les positions souhaitées ( ou via loadmodule si dans article)

      Commentaire


      • #4
        Merci de ton retour (que j'avais raté), ta réponse rate une contrainte que je n'ai pass clarifier dans le premier post : c'est le même module qui doit être chargé pour que le client n'est pas à modifier deux fois les informations dans deux modules différents voire 3 dans notre cas présents.

        Commentaire


        • #5
          donc les infos du premier doivent remplir les autres ? si elles sont deja remplies une fois avant l'arrivée sur la page, par exemple les informations d'un utilisateur entrées lors de l'inscription qui apparaissent dans le module de connexion, alors lors du rechargement de la page elles seront automatiquement assignées aux deux instances car ce sont des informations qui sont identique pour les deux modules. Ce que tu modifies avec une surcharge, c est la manière dont s affiche les informations (ou non) pas les informations en elles memes.

          Commentaire


          • #6
            Je ne suis pas sur de te suivre. Du coup notre situation réelle c'était : un module où les users saisissent des jours et horaires d'ouvertures mais qui s'affichent à x endroit sur la page (top, footer et menu mobile) mais on ne voulait pas que lors des modifs de jours etc les users doivent modifier 3 modules du coup j'ai cherché une solution de clonage car on ne peut pas attribuer un le même module à x positions à x override différents
            La vraie bonne solution serait de coder un composant qui tocke les infos et 3 modules qui vont charger ces infos pour l'afficher avec chacun leur override mais : mon collègue ne sait pas coder un tel composant rapidement (moi je saurais mais pas rapidement ) , un composant juste pour une ligne d'horaires d'ouverture ca fait tout much.

            Commentaire


            • #7
              tu pourrais utiliser un article avec des champs personnalisés.
              puis créer trois modules qui iraient afficher ces champs personnalisés.

              s'il s'agit juste d'affichage, une autre solution serait de créer un module dans une position inexistante, puis de charger le même module dans un module personnalisé (*3)
              aidons nous les uns les autres ...

              https://www.web54.fr

              Commentaire


              • #8
                bon va falloir ruser:
                une surcharge du module custom pour entrer les infos et le stocker dans la bdd (avec l'id de l'utilisateur ou autre) pour stocker les infos
                la surcharge en php doit contenir deux champs et une requete de creation (si c est la premiere utilisation) ou mise à jour de la bdd.

                Si cela te pose trop de soucis, les utilisateurs peuvent les entrer sous forme de champs personnalisés dans leur fiche utilisateurs ou fiches de contact.

                Et une seconde surcharge du module qui va récupérer les infos associées a l'utilisateur concernant les horaires d'ouverture soit dans la base de données, soit dans les champs personnalisés de l'utilisateur.
                Je passe par des surcharges du mod_custom quand j'ai besoin de parser du code php directement. Et vu que depuis J5 tu peux en avoir plusieures du même module, tu peux jongler entre les deux.

                Si tu passe par les champs personnalisés, tu t'epargne une surcharge.
                Dernière édition par lefabdu51 à 27/10/2024, 22h33

                Commentaire

                Annonce

                Réduire
                Aucune annonce pour le moment.

                Partenaire de l'association

                Réduire

                Hébergeur Web PlanetHoster
                Travaille ...
                X