Gestion des Menus

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

  • [RÉGLÉ] Gestion des Menus

    Bonjour
    Je souhaite développer un site dont le menu principal change selon les pages affichées, hors il semble que celui -ci reste toute immuable. Y a-t-il une solution ?
    En clair
    Mon menu principal : Accueil Menu1 Menu2 Menu3
    Lorsque je clique sur Menu 1, je souhaite avoir : Accueil SousMenuA SousMenuB SousMenuC
    Lorsque je clique sur Menu 2, je souhaite avoir : Accueil SousMenuG SousMenuH SousMenuI

    En quelque sorte l'idée est de garder une seule template, un seul site à gérer mais de scinder complètement les rubriques de mon site pour que une fois dans l'une les autres n'apparaissent plus.

    Merci d'avance pour votre aide !
    Dernière édition par toffffe à 08/06/2013, 15h47

  • #2
    Re : Gestion des Menus

    Moi j'ai créé un module pour mon menu qui me permet de le personnaliser comme je veux. Donc tu peux très bien du coup choisir les éléments à afficher. Et comme je stock des éléments en session je ne fais la requête qu'une seul fois.

    Commentaire


    • #3
      Re : Gestion des Menus

      Merci Skuti, peux m'expliquer un peu plus en détail comment tu as fait ?
      Merci d'avance

      Commentaire


      • #4
        Re : Gestion des Menus

        Perso j'aurais fais 2 modules qui vont vers le même menu :
        1 pour Accueil Menu1 Menu2 Menu3 afficher de niveau 1 à niveau 1
        et un second affichant les liens de niveau 2 à tous
        avec bien entendu dans chaque sous menu 1 menu 2 et menu 3 un lien alias de accueil
        Auto-entrepreneur spécialiste Joomla https://www.stylitek.com

        Joomladay 2023 https://www.joomladay.fr/ 2 jours à ne pas manquer

        Commentaire


        • #5
          Re : Gestion des Menus

          Si tu t'y connais en code ça devrait aller.

          En fait, je récupère tout simplement la liste de tous les menus de tel ou tel type grâce à son id.
          Par exemple si j'ai un type de menu qui s'appelle main_menu et qui a pour id 1. En utilisant mon helper je récupère les menus. Il te suffirais donc d'avoir deux types de menu différent en fonction d'un paramètre tu switch de menu.

          Voila mon helper:
          Code PHP:
          <?php
          /**
           * @version        $Id: helper.php 96 2011-08-11 06:59:32Z michel $
           * @copyright    Copyright (C) 2013 Open Source Matters, Inc. All rights reserved.
           * @license        
           */

          // no direct access
          defined('_JEXEC') or die('Restricted access');

          class 
          modMy_menuHelper
          {
              static public function 
          getItem($params) {
                  
          $css_class $params->get('classname');
                  return 
          "";
              }
              
              static public function 
          getAllMenus($id){
                  
          $session JFactory::getSession();
                  if(
          $session->has('mainmenu')) return $session->get('mainmenu'); // Si le menu est déjà en Session
                  
          else{
                      
          $elems self::queryMenu($id); // Première requête qui récupère les menus principaux
                      
          foreach($elems as $key => $elem// Parcours de chaque menus
                          
          self::getAllSubMenus($id$elem); // Recupère les enfants de chaque menus
                      
          $session->set('mainmenu',$elems); // On stock en Session pour ne pas refaire la requête à chaque chargement
                      
          return $elems;
                  }
              }
              
              static private function 
          getAllSubMenus($id$parent){
                  
          $parent->children self::queryMenu($id$parent); // Recupère les enfants du menu passé en paramètre et le stock dans un attribut children
                  
          $parent->module self::queryModule(JFactory::getDbo() , $parent->id);
                  if(
          $parent->children !== null){ // Si il y a des enfants on va récuperer les enfants des enfants
                      
          foreach($parent->children as $key => $child){ // On parcours d'abord les enfants
                          
          self::getAllSubMenus($id$child); // On récupère ici les enfants des enfants
                      
          }
                  }
                  return; 
          // Si il n'y a pas d'enfant on arrête la fonction récursive
              
          }
              
              static private function 
          queryMenu($id$parent null){
                  
          $db    JFactory::getDbo();
                  
          $query  $db->getQuery(true);
                  
                  if(!
          $parent)    $where 'mt.id = '.$id.' AND m.published = 1 AND m.level = 1';
                  else            
          $where 'mt.id = '.$id.' AND m.published = 1 AND m.level = '.($parent->level 1).' AND m.parent_id = '.$parent->id;
                  
                  
          $query->select('m.*');
                  
          $query->from('#__menu_types AS mt');
                  
          $query->leftJoin('#__menu AS m ON mt.menutype = m.menutype');
                  
          $query->where($where);
                  
          $query->order('m.lft ASC');
                  
          $db->setQuery($query->__toString());
                  
          $result $db->loadObjectList();
              return (
          count($result) > 0)? $result null;
              }
              
              static private function 
          queryModule($db $id){
                  
          $query $db->getQuery(true);
                  
          $query->select('m.*');
                  
          $query->from("#__modules AS m");
                  
          $query->leftJoin("#__modules_menu AS mm ON mm.moduleid = m.id");
                  
          $query->where("mm.menuid = $id");
                  
          $db->setQuery($query->__toString());
                  
          $result $db->loadObjectList();
                  
                  return (
          $result)? true false;
              }
              
              public function 
          getActiveMenu($menu$itemid){
                  
                  if(
          $menu->id == $itemid || $this->getItemIdInLink($menu,$itemid)) return true;
                  else if(
          $menu->children !== null){
                      foreach(
          $menu->children as $child){
                          if(
          $this->getActiveMenu($child$itemid)) return true;
                      }
                  }
                  return 
          false;
              }
              
              private function 
          getItemIdInLink($menu,$itemid){
                  
          $start strpos($menu->link'Itemid=') + strlen('Itemid=');
                  
          $end $start 3;
                  if(
          substr($menu->link$start$end) == $itemid) return true;
                  return 
          false;
              }
          }
          Bon après c'est pas vraiment optimisé, comme par exemple au niveau des Itemid. Dans mon cas, si un Itemid est inférieur ou supérieur à trois caractère, ça ne fonctionne pas. Ensuite cette méthode ne concerne que les menus qui ont un lien de type externe.

          Ensuite à toi de voir comment tu peux adapter le code à ton utilisation.

          Commentaire


          • #6
            Re : Gestion des Menus

            Bon merci à vous deux,
            J'ai tardé à répondre pour faire un certain nombre d'essais sans succès.

            Skutti, mon niveau code code état en dessous de zéro j'avoue ne pas avoir été ben loin,j'ai donc vite laissé tombé !

            Toffffe, ton idée me semble pas mal, mais je me heurte un peu toujours au même soucis.
            En fait sur le menu principale je coupe bien mes niveaux, mais en partant des niveaux 2 sur le deuxième module, j'affiche toujours l'intégralité de mes sous menus ABC et GHI.
            Peut être n'ai-je pas été assez clair donc je vais essayer de refaire le schéma voulu :

            Menu principal : Accueil - Menu 1 - Menu 2 - Menu 3

            Je clique sur Menu 1 et je souhaiterais vous affiche à la place du menu ci-dessus :
            Accueil - sous Menu 1A - sous Menu 1B - sous Menu 1C

            Du menu princiapl je clique sur Menu 2 et devrait s'afficher
            Accuel - sous Menu 2G - Sous Menu 2H - sous Menu 2I

            et pareil pour menu 3

            Toffffe si tu penses que ta méthode fonctionne pour cela peux tu être plus clair dans la mise en place ?

            Merci encore

            Commentaire


            • #7
              Re : Gestion des Menus

              C'est pourtant bien cela:
              En fait tu n'as qu'un seul menu en tout mais plusieurs module qui vont vers ce menu

              Menu principal : Accueil - Menu 1 - Menu 2 - Menu 3 dans le module tu lui affiches le niveau de 1 à 1 et tu le publie qu'en page d'accueil

              Accueil - sous Menu 1A - sous Menu 1B - sous Menu 1C => accueil est un alias de accueil et les autres des liens articles qui dans le menu on comme lien parent Menu1 et dans le module vers toujours le même menu tu affiches les niveaux 2 à tous et tu publies ce module sur toutes les pages sauf la page d'accueil
              Auto-entrepreneur spécialiste Joomla https://www.stylitek.com

              Joomladay 2023 https://www.joomladay.fr/ 2 jours à ne pas manquer

              Commentaire


              • #8
                Re : Gestion des Menus

                perso, je crees un premier menu qui contient les liens menu1 -Menu 2 -menu3
                et je crées un menu pour chaque sous niveau:
                Accueil - sous Menu 1A - sous Menu 1B - sous Menu 1C

                Ensuite j assigne chaque module de sous menu sous menu à l'element de menu correspondant
                sous menu1 assigné a l element de menu menu1......

                Commentaire


                • #9
                  Re : Gestion des Menus

                  Merci a tous je progresse,
                  j'ai un dernier petit soucis.
                  Mon menu accueil s’affiche comme je le souhaite, mon sous menu1, sous menu2 ... également,
                  par contre dans les sous menu, je n'arrive pas a faire disparaître le menu principal bien que mes modules précise bien un niveau de départ à 2 ..
                  Par contre si je clique sur sous menu1, à ce moment la j'ai bien uniquement mes sous menus qui s'affiche !
                  Encore une petite idée peut -être ?
                  Dernière édition par lephot à 08/06/2013, 11h14

                  Commentaire


                  • #10
                    Re : Gestion des Menus

                    C'est réglé tout fonctionne.
                    Désolé pour le post précédent, à force de faire des tests j'avais un module non désactivé qui traînait !

                    Commentaire


                    • #11
                      Re : Gestion des Menus

                      Uper je passe donc ton post en réglé http://forum.joomla.fr/announcement.php?f=176
                      Auto-entrepreneur spécialiste Joomla https://www.stylitek.com

                      Joomladay 2023 https://www.joomladay.fr/ 2 jours à ne pas manquer

                      Commentaire


                      • #12
                        Re : Gestion des Menus

                        Ah oui merci j'ai oublié !

                        Commentaire

                        Annonce

                        Réduire
                        Aucune annonce pour le moment.

                        Partenaire de l'association

                        Réduire

                        Hébergeur Web PlanetHoster
                        Travaille ...
                        X