Joomladay francophone 2018 à Paris 18 et 19 mai

Ajouter le level dans la classe des tags UL et LI

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

  • Ajouter le level dans la classe des tags UL et LI

    Bonjour,

    Sous joomla 1.0, j'utilisais YooMenu pour générer de beaux menus en listes (ul/li). Ce dernier me générait un code du type :

    Code HTML:
    <ul class="menu">
        <li class="level1 item1 parent">lien
            <ul class="level2">
                <li class="level1 item2">lien</li>
            </ul>
        </li>
    </ul>
    Sous joomla 1.5, j'ai remarqué que le mode "liste" donnait (enfin) du code propre en natif. Cela aurait été parfait si le mainmenu d'origine écrivait également une classe relative au level (class="level2" par exemple).

    J'ai un peu cherché et j'ai trouvé ça :

    http://www.antevox.fr/tlch/creer-mod...joomla-1.5.pdf

    http://www.joomlashack.com/joomla-ho...s-in-joomla-15

    C'est donc apparemment possible. J'ai fait tout ce qui est préconisé dans des deux articles :

    - module du menu configuré en mode "liste" (et juste liste, pas liste simple)
    - module du menu configuré en "Toujours afficher les sous-menus"
    - position left (où est appelé le menu) déclarée avec style=""xhtml"

    Note : j'ai aussi testé avec l'option "Développer le menu" (dans autres options) avec "Toujours afficher les sous-menus" activée. Toujours pas de levels en vue...

    Donc la question : comment faire ? J'ai un joomla 1.5.15.

    Si vous êtes curieux et que vous souhaitez savoir pourquoi je veux faire ça, c'est parce que l'intégration du template est plus facile.

    Merci d'avance

  • #2
    salut
    si tu cherches à faire un menu déroulant tu peux jeter un oeil à mon tuto
    http://www.joomlack.fr.nf/demos-d-ex...oomenu-ck.html
    Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
    http://www.template-creator.com Outil de création de templates
    Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

    Commentaire


    • #3
      Bonjour,
      ou bien il y a eu un changement dans Joomla 1.5 en cours de route, ou bien il y a un paramètre qui m'échappe totalement, ou bien le premier lien que tu donnes s'est pris les pieds dans le tapis.
      Pour le deuxième bénéfice du doute, il parle de templates spécifiques, je pense qu'ils incluent une surcharge du mod_mainmenu.

      J'ai gratté, j'ai trouvé !

      Donc crée si tu n'en n'as pas encore un dossier html dans ton template et dedans un dossier mod_mainmenu et copie dedans le fichier modules/mod_mainmenu/tmpl/default.php
      Puis tu modifies ce fichier comme ça :
      Code PHP:
      <?php
      // no direct access
      defined('_JEXEC') or die('Restricted access');

      if ( ! 
      defined('modMainMenuXMLCallbackDefined') ) 
      {
      function 
      modMainMenuXMLCallback(&$node$args)
      {
          
      $user    = &JFactory::getUser();
          
      $menu    = &JSite::getMenu();
          
      $active    $menu->getActive();
          
      $path    = isset($active) ? array_reverse($active->tree) : null;

          if ((
      $args['end']) && ($node->attributes('level') >= $args['end']))
          {
              
      $children $node->children();
              foreach (
      $node->children() as $child)
              {
                  if (
      $child->name() == 'ul') {
                      
      $node->removeChild($child);
                  }
              }
          }

          if (
      $node->name() == 'ul') {
              foreach (
      $node->children() as $child)
              {
                  
      $LevelUL $child->attributes('level'); // GS (pas trouvé le level sur node UL : on prend celui des enfants
                  
      if ($child->attributes('access') > $user->get('aid'0)) {
                      
      $node->removeChild($child);
                  }
              }
              
      $node->addAttribute('class',"level"$LevelUL); //GS

          
      }

          if ((
      $node->name() == 'li') && isset($node->ul)) {
              
      $node->addAttribute('class''parent');
          }

          if (isset(
      $path) && (in_array($node->attributes('id'), $path) || in_array($node->attributes('rel'), $path)))
          {
              if (
      $node->attributes('class')) {
                  
      // GS $node->addAttribute('class', $node->attributes('class').' active');
                  
      $node->addAttribute('class'"level".$node->attributes('level').' active'); //GS
              
      } else {
                  
      // GS $node->addAttribute('class', 'active');
                  
      $node->addAttribute('class'"level".$node->attributes('level').' active'); //GS
              
      }
          }
          else
          {
              if (isset(
      $args['children']) && !$args['children'])
              {
                  
      $children $node->children();
                  foreach (
      $node->children() as $child)
                  {
                      if (
      $child->name() == 'ul') {
                          
      $node->removeChild($child);
                      }
                  }
              }
          }

          if ((
      $node->name() == 'li') && ($id $node->attributes('id'))) {
              if (
      $node->attributes('class')) {
                  
      // GS $node->addAttribute('class', $node->attributes('class').' item'.$id);
                  
      $node->addAttribute('class'"level".$node->attributes('level').' item'.$id); //GS
              
      } else {
                  
      // GS $node->addAttribute('class', 'item'.$id);
                  
      $node->addAttribute('class',"level"$node->attributes('level').' item'.$id); //GS
              
      }
          }

          if (isset(
      $path) && $node->attributes('id') == $path[0]) {
              
      $node->addAttribute('id''current');
          } else {
              
      $node->removeAttribute('id');
          }
          
      $node->removeAttribute('rel');
          
      $node->removeAttribute('level');
          
      $node->removeAttribute('access');
      }
          
      define('modMainMenuXMLCallbackDefined'true);
      }

      modMainMenuHelper::render($params'modMainMenuXMLCallback');
      Les lignes supprimées sont préfixées par // GS, les lignes ajoutées suffixées par //GS.
      Schtroumpfe toi le Schtroumpf t'aidera.
      Je ne schtroumpfe pas aux demandes de schtroumpf par MP.

      Commentaire


      • #4
        ça fonctionne merci !

        Deux remarques :

        J'utilise Gmaccess, ce composant à modifié le module :

        Code PHP:
        if ($node->name() == 'ul') {
                foreach (
        $node->children() as $child)
                {
                    
        //if ($child->attributes('access') > $user->get('aid', 0)) {
                        //modif gmaccess
                    
                    
        if (!fonctionGmaccess::checkgmaccess2('com_content','read','users',$user->gmid,'menu',$child->attributes('id'))) {
                        
        $node->removeChild($child);
                    }
                }
            } 
        Qu'est-ce que cela implique ?

        Par ailleurs, est-il possible de rajouter les classe de level dans les UL ?

        Merci !

        Commentaire


        • #5
          Re,
          Qu'est-ce que cela implique ?
          la suppression des noeud interdits est faite d'après la gestion des droits GM et plus depuis la gestion des droits native. Pars du fichier modifié et applique mes modifs.

          Par ailleurs, est-il possible de rajouter les classe de level dans les UL ?
          Ben oui, normalement c'était ça :
          Code PHP:
              if ($node->name() == 'ul') {
                  foreach (
          $node->children() as $child)
                  {
                      
          $LevelUL $child->attributes('level'); // GS (pas trouvé le level sur node UL : on prend celui des enfants
                      
          if ($child->attributes('access') > $user->get('aid'0)) {
                          
          $node->removeChild($child);
                      }
                  }
                  
          $node->addAttribute('class',"level"$LevelUL); //GS 
          Donc deux lignes à récupérer...
          Schtroumpfe toi le Schtroumpf t'aidera.
          Je ne schtroumpfe pas aux demandes de schtroumpf par MP.

          Commentaire


          • #6
            Merci, je vais tester ça à l'occasion !

            Commentaire


            • #7
              ajout de balises dans le menu

              Bonjour,
              je souhaiterais ajouter des div qui engloberais le contenu des li de la liste. Comment m'y prendre ?
              En gros actuellement le menu de joomla est du genre <ul><li><a>menu1</a></li>...</ul>
              et je voudrais <ul><li><div><a>menu1</a></div></li>...</ul>

              C'est possible ? si oui comment ?

              Merci

              Commentaire


              • #8
                Bonjour

                J'ai utilisé la solution proposée par "grand stroumpf" telle qu'elle est décrite. En analysant le fichier html résultant, je me suis rendu compte que j'ai deux "<<" devant le premier UL de mon menu. Tout le reste est ok. Je ne comprends pas trop pourquoi.

                cela donne :

                <div class="nav-container1">
                <<ul class="menunav-container" id="menunav-container">
                <li class="level1 item2"><a href="/randotravail/index.php?option=com_content&amp;view=article&amp; id=2&amp;Itemid=2"><span>Essai</span></a>
                <ul class="level2">


                Ce double "<<" pertube quelque peu mon affichage.... et ce n'est pas peu dire. Comment faut-il modifier le fichier default.php pour que ce maudit "<" disparaisse?

                Commentaire


                • #9
                  Bonjour,
                  Ce double "<<" pertube quelque peu mon affichage.... et ce n'est pas peu dire
                  j'imagine bien... mais je ne vois pas bien d'où ça peut sortir...
                  Annule les modif une par une jusqu'à cerner celle qui est à l'origine de ça et si tu ne vois pas le pb viens coller les lignes concernées par ici..
                  Schtroumpfe toi le Schtroumpf t'aidera.
                  Je ne schtroumpfe pas aux demandes de schtroumpf par MP.

                  Commentaire


                  • #10
                    Envoyé par Grand Schtroumpf Voir le message
                    Bonjour,
                    ou bien il y a eu un changement dans Joomla 1.5 en cours de route, ou bien il y a un paramètre qui m'échappe totalement, ou bien le premier lien que tu donnes s'est pris les pieds dans le tapis.
                    Pour le deuxième bénéfice du doute, il parle de templates spécifiques, je pense qu'ils incluent une surcharge du mod_mainmenu.

                    J'ai gratté, j'ai trouvé !

                    Donc crée si tu n'en n'as pas encore un dossier html dans ton template et dedans un dossier mod_mainmenu et copie dedans le fichier modules/mod_mainmenu/tmpl/default.php
                    Puis tu modifies ce fichier comme ça :
                    Code PHP:
                    <?php
                    // no direct access
                    defined('_JEXEC') or die('Restricted access');

                    if ( ! 
                    defined('modMainMenuXMLCallbackDefined') ) 
                    {
                    function 
                    modMainMenuXMLCallback(&$node$args)
                    {
                        
                    $user    = &JFactory::getUser();
                        
                    $menu    = &JSite::getMenu();
                        
                    $active    $menu->getActive();
                        
                    $path    = isset($active) ? array_reverse($active->tree) : null;

                        if ((
                    $args['end']) && ($node->attributes('level') >= $args['end']))
                        {
                            
                    $children $node->children();
                            foreach (
                    $node->children() as $child)
                            {
                                if (
                    $child->name() == 'ul') {
                                    
                    $node->removeChild($child);
                                }
                            }
                        }

                        if (
                    $node->name() == 'ul') {
                            foreach (
                    $node->children() as $child)
                            {
                                
                    $LevelUL $child->attributes('level'); // GS (pas trouvé le level sur node UL : on prend celui des enfants
                                
                    if ($child->attributes('access') > $user->get('aid'0)) {
                                    
                    $node->removeChild($child);
                                }
                            }
                            
                    $node->addAttribute('class',"level"$LevelUL); //GS

                        
                    }

                        if ((
                    $node->name() == 'li') && isset($node->ul)) {
                            
                    $node->addAttribute('class''parent');
                        }

                        if (isset(
                    $path) && (in_array($node->attributes('id'), $path) || in_array($node->attributes('rel'), $path)))
                        {
                            if (
                    $node->attributes('class')) {
                                
                    // GS $node->addAttribute('class', $node->attributes('class').' active');
                                
                    $node->addAttribute('class'"level".$node->attributes('level').' active'); //GS
                            
                    } else {
                                
                    // GS $node->addAttribute('class', 'active');
                                
                    $node->addAttribute('class'"level".$node->attributes('level').' active'); //GS
                            
                    }
                        }
                        else
                        {
                            if (isset(
                    $args['children']) && !$args['children'])
                            {
                                
                    $children $node->children();
                                foreach (
                    $node->children() as $child)
                                {
                                    if (
                    $child->name() == 'ul') {
                                        
                    $node->removeChild($child);
                                    }
                                }
                            }
                        }

                        if ((
                    $node->name() == 'li') && ($id $node->attributes('id'))) {
                            if (
                    $node->attributes('class')) {
                                
                    // GS $node->addAttribute('class', $node->attributes('class').' item'.$id);
                                
                    $node->addAttribute('class'"level".$node->attributes('level').' item'.$id); //GS
                            
                    } else {
                                
                    // GS $node->addAttribute('class', 'item'.$id);
                                
                    $node->addAttribute('class',"level"$node->attributes('level').' item'.$id); //GS
                            
                    }
                        }

                        if (isset(
                    $path) && $node->attributes('id') == $path[0]) {
                            
                    $node->addAttribute('id''current');
                        } else {
                            
                    $node->removeAttribute('id');
                        }
                        
                    $node->removeAttribute('rel');
                        
                    $node->removeAttribute('level');
                        
                    $node->removeAttribute('access');
                    }
                        
                    define('modMainMenuXMLCallbackDefined'true);
                    }

                    modMainMenuHelper::render($params'modMainMenuXMLCallback');
                    Les lignes supprimées sont préfixées par // GS, les lignes ajoutées suffixées par //GS.
                    Envoyé par Grand Schtroumpf Voir le message
                    Re,

                    la suppression des noeud interdits est faite d'après la gestion des droits GM et plus depuis la gestion des droits native. Pars du fichier modifié et applique mes modifs.


                    Ben oui, normalement c'était ça :
                    Code PHP:
                        if ($node->name() == 'ul') {
                            foreach (
                    $node->children() as $child)
                            {
                                
                    $LevelUL $child->attributes('level'); // GS (pas trouvé le level sur node UL : on prend celui des enfants
                                
                    if ($child->attributes('access') > $user->get('aid'0)) {
                                    
                    $node->removeChild($child);
                                }
                            }
                            
                    $node->addAttribute('class',"level"$LevelUL); //GS 
                    Donc deux lignes à récupérer...
                    J'ai remarqué une chose, si l'on ajoute le level, la classe "parent" et "active" n'apparaissent plus. J'ai tenté d'y remédier mais en vain. Est-ce possible ?

                    Merci !

                    Commentaire


                    • #11
                      Pas d'idée ???

                      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