Ferguss0N Posté(e) le 20 juillet 2009 Partager Posté(e) le 20 juillet 2009 Bonjour à tous, Me voilà devant un problème assez casse-bonbon si vous permettez l'expression : je cherche à faire un menu à 3 niveau sous spip (ce qui est fait) mais je souhaite également que lorsque que l'on clique dans un article du menu, ledit menu reste ouverte avec les sous catégories cliquées. Je suis un novice en javascript et donc j'ai beaucoup de mal à réaliser le script pour que le menu ne se replie pas. J'ai écumé pas mal de forum en vain... Voici ma boucle spip : <script src="jquery.collapsor.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ $('ul a').collapsor(); $('dl strong').collapsor({sublevelElement:'dl', speed: 500}); }); </script> <ul id="navigation"> <BOUCLE_M4(RUBRIQUES){id_rubrique=4}{par titre}> #SET{rub,(#ENV{cacher_article}|?{6666,#ID_RUBRIQUE})} <li class="navigation"> <a href="#menu_1"><strong>[(#TITRE|supprimer_numero)]</strong></a> <ul> #SET{rub,(#ENV{cacher_article}|?{6666,#ID_RUBRIQUE})} <BOUCLE_ss_rubrique4(RUBRIQUES){id_parent}{par num titre}> <li class="subMenu" > <a href="#menu_1_2">[(#TITRE|supprimer_numero)]</a> <ul> <BOUCLE_articlerub4 (ARTICLES){id_rubrique}{par num titre}> <li class="subArticle"> <i>- <a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></i> </li> </BOUCLE_articlerub4> </ul> </li> </BOUCLE_ss_rubrique4> </ul> </li> </BOUCLE_M4> </ul> et le javascript : (function($) { $.fn.collapsor = function(settings) { // override default settings settings = $.extend({}, $.fn.collapsor.defaults, settings); var triggers = this; // for each element return this.each(function() { // occult the collapsing elements $(this).find('+ ' + settings.sublevelElement).hide(settings.closeClass); //show the opened if($(this).hasClass(settings.openClass)){ $(this).find('+ ' + settings.sublevelElement).show(); } // event handling $(this).click(function() { // if the new active have sublevels if ($(this).next().is(settings.sublevelElement)){ // blur and add the open class to the clicked $(this).blur().toggleClass(settings.openClass); // close others if (settings.closeOthers == true) { $(this).parent().parent().children().find('.'+settings.openClass).not(this).removeClass(settings.openClass).next().animate({height:'toggle', opacity:'toggle'}, settings.speed, settings.easing); } // toggle the clicked $(this).next().animate({height:'toggle', opacity:'toggle'}, settings.speed, settings.easing); return false; } }); }); }; // default settings $.fn.collapsor.defaults = { openClass:'open', sublevelElement: 'ul', closeOthers: false, speed: 500, easing: 'swing' }; })(jQuery); Aidez moi s'il vous plait ! Je vous en serait reconnaissant ! Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 20 juillet 2009 Partager Posté(e) le 20 juillet 2009 Ca fait un sacré paquet de temps que j'ai pas touché à spip mais ça devrait ressembler à quelque chose comme ça : dans les liens de tes menus (à tous les niveaux), ajoute une classe pour dire explicitement si tu veux que l'item soit ouvert ou fermé par défaut : <a href="#menu_1_2"[ class="(#EXPOSE{open})"]> Références : La doc du plugin collapsor La doc SPIP sur la balise #EXPOSE Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 21 juillet 2009 Auteur Partager Posté(e) le 21 juillet 2009 Ca fait un sacré paquet de temps que j'ai pas touché à spip mais ça devrait ressembler à quelque chose comme ça : dans les liens de tes menus (à tous les niveaux), ajoute une classe pour dire explicitement si tu veux que l'item soit ouvert ou fermé par défaut : <a href="#menu_1_2"[ class="(#EXPOSE{open})"]> Références : La doc du plugin collapsor La doc SPIP sur la balise #EXPOSE Je ne veux pas que ça soit ouvert par défaut mais seulement après le clic dans un article par ex. Mais merci du conseil je vais fouiller de ce coté ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 21 juillet 2009 Auteur Partager Posté(e) le 21 juillet 2009 J'ai essayé avec #EXPOSE mais ça ne fonctionne pas malheureusement... je tente autrement et je vous tiens au courant ! Etant donné que la page se recharge complètement le menu se remet à zéro... je sèche ! HELP Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 21 juillet 2009 Partager Posté(e) le 21 juillet 2009 Dans ce cas... je n'ai pas compris la question et il vaudrait mieux que tu la reformules :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Aoren Posté(e) le 21 juillet 2009 Partager Posté(e) le 21 juillet 2009 le menu doit apparaitre après que "popol" ai cliqué sur un lien ensuite le menu reste tant que "popol" n'a pas quitté l'article en question. Remplace "popol" par qui tu veux Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 21 juillet 2009 Auteur Partager Posté(e) le 21 juillet 2009 Dans ce cas... je n'ai pas compris la question et il vaudrait mieux que tu la reformules :) En fait cela ne s'applique pas forcément à spip, mais à un menu basique. Je souhaite que le menu reste ouvert lorsque je clic dans un liens du menu (qui amène vers une nouvelle page donc ce qui fait recharger la page). Au départ on a : MENU (qui est non déployé) Après clic dans la navigation on a : MENU SOUS-MENU ARTICLE DU SOUS-MENU Après clic sur ARTICLE DU SOUS-MENU on doit avoir absoluement : MENU SOUS-MENU ARTICLE DU SOUS-MENU C'est pour ne pas perdre la navigation, car sinon cela implique de recliquer sur le menu à chaque fois étant donné qu'il se remet à zéro... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 21 juillet 2009 Partager Posté(e) le 21 juillet 2009 Ok donc j'avais bien compris ^^ Peux-tu vérifier que les liens qui doivent rester ouverts ont bien la classe open après avoir ajouté le petit truc que je t'ai dit plus haut, car c'est ça qui dit à collapsor de garder l'élément ouvert. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 22 juillet 2009 Auteur Partager Posté(e) le 22 juillet 2009 La solution est le PHP avec un js de type "faire voir après rechargement" je suis en train de travailler dessus avec un ami beaucoup plus calé que moi en dév... Je mettrai le script une fois terminé Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 22 juillet 2009 Partager Posté(e) le 22 juillet 2009 Ouais enfin faut pas réinventer la roue hein... ton script de base vérifie déjà si les liens contiennent la classe open pour ne pas les fermer au démarrage de la page... pas de raison pour que ça ne fonctionne pas ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.