1
Indiquez l’intérêt que vous portez à cette question
5

Menu accordéon Alsacréations

Pivalou
<code>Bonjour,

voici le menu en question : http://www.alsacreations.com/tuto/lire/606-Creer-un-menu-accordeon-avec-jQuery.html

Dans le cadre d'un exercice à la fac, je devais transposer un site fait en MVC sous Spip.

Je devais donc transposer mon menu déroulant, comme j'ai pas mal galéré avec la fameuse classe open_at_load, je voulais partager mon retour d'expérience avec ceux qui galéreront à leur tour dans l'avenir.

J'ai trouvé la réponse à mon problème sur ce site :

https://svn.tice.ac-caen.fr/comp.php?repname=TiSpip&path=%2F&compare[]=%2Ftrunk@141&compare[]=%2Ftrunk@142

voici le code javascript :

<script type="text/javascript"> 

<!--
    $(document).ready( function () {
        // On cache les sous-menus
        // sauf celui qui porte la classe "open_at_load" :
		$("ul.subMenu:not('.open_at_load')").hide();
		//$('ul.open_at_load').parent('li').addClass("open");
        // On selectionne tous les items de liste portant la classe "toggleSubMenu"
		
        // et on remplace l'element span qu'ils contiennent par un lien :
        $("li.toggleSubMenu span").each( function () {
            // On stocke le contenu du span :
            var TexteSpan = $(this).text();
            $(this).replaceWith('<a href="" title="Afficher le sous-menu">' + TexteSpan + '</a>') ;
        } ) ;
    
        // On modifie l'evenement "click" sur les liens dans les items de liste
        // qui portent la classe "toggleSubMenu" :
        $("li.toggleSubMenu > a").click( function () {
            // Si le sous-menu etait deja ouvert, on le referme :
            if ($(this).next("ul.subMenu:visible").length != 0) {
				$(this).next("ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") } ); 
        } 
               
            // Si le sous-menu est cache, on ferme les autres et on l'affiche :
            else {
                $("ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") } );
                $(this).next("ul.subMenu").slideDown("normal", function () { $(this).parent().addClass("open") } );
		            }
            // On emp&ecirc;che le navigateur de suivre le lien :
            return false;
        });
    
    } ) ;
    // -->

    </script>

et voici ma boucle :

 <BOUCLE_rubriques(RUBRIQUES) {id_rubrique IN 17,20,19}{tout}>
                [(#EXPOSE|oui) #SET{class,open} ]
                <li class="toggleSubMenu [ (#EXPOSE|?{open})]">
					<a href="[(#URL_RUBRIQUE)]" [ class="(#EXPOSE)"]>[(#TITRE|supprimer_numero)]</a>
                    
                    [(#EXPOSE|oui) #SET{class,open_at_load} ]
                    <B_sous_rubriques>
                    <ul class="subMenu [ (#EXPOSE|?{open_at_load})]" >
                        <BOUCLE_sous_rubriques(ARTICLES){id_rubrique} {par num titre} {inverse}>
                          <li> <a href="#URL_ARTICLE" [ class="(#EXPOSE)"]>[(#_sous_rubriques:TITRE|supprimer_numero)]</a></li>
                        </BOUCLE_sous_rubriques>
		      		</ul>
                    </B_sous_rubriques>
              	</li>
              	</BOUCLE_rubriques>