IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Indiquer au template l'item de menu actif correspond à la page affichée


Sujet :

Symfony PHP

  1. #1
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut Indiquer au template l'item de menu actif correspond à la page affichée
    Bonjour,

    J'ai un template avec la commande suivante pour insérer un menu horizontal (le menu de l'application) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {{ render(controller("SdzReportBundle:Report:menuHorizontal")) }}
    L'action appelée est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function menuHorizontalAction() {    
            return $this->render ( 'SdzReportBundle::menuHorizontal.html.twig' );
        }
    Et le fichier twig qui crée ce menu est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <div class="navbar">
                  <div class="navbar-inner">
                    <div class="container">
                      <a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-responsive-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                      </a>
                      <a class="brand" href="#">ALSA</a>
                      <div class="nav-collapse collapse navbar-responsive-collapse">
                        <ul class="nav">
                          <li ><a href="#">SOCIETE</a></li>
                          <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">CLIENT<b class="caret"></b></a>
                            <ul class="dropdown-menu">
                              <li><a href="#">Fiche Clients</a></li>
                              <li><a href="#">Liste Clients</a></li>
                            </ul>
                          </li>
                          <li class="active"><a href="#">RAPPORT</a></li>
                          <li><a href="#">HISTORIQUE</a></li>
                        </ul>
                      </div><!-- /.nav-collapse -->
                    </div>
                  </div><!-- /navbar-inner -->
                </div><!-- /navbar -->
              </div>
    Dans ce menu exemple c'est le lien RAPPORT qui est l'item actif du menu.

    Mon soucis est de placer la class="active" en fonction de la page affichée et donc de l'item correspond du menu. Par exemple, quand la page SOCIETE est affichée, le lien <a href="#">SOCIETE</a> doit devenir <a href="#" class="active">SOCIETE</a> et non le lien <a href="#" class="active">RAPPORT</a> qui doit être dans ce cas <a href="#">RAPPORT</a>.

    Je suppose qu'avec une boucle de type twig cela doit être assez facile à faire mais il faut savoir où et quand passer le paramètre de la page appelée pour pour mettre à active le lien correspond du menu.

    Avez-vous une idée pour faire cela ? Si une autre idée est plus facile, n'hésitez pas à me l'indiquer.

    Par avance, merci.

    A+
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ render(controller("SdzReportBundle:Report:menuHorizontal", { 'current' : 2}))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <li class="{% if current==2 %}active{% endif %}"><a ...

  3. #3
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut
    Bonsoir,

    Dans ton exemple, la variable current vaudra toujours 2.

    J'ai trouvé la solution de renvoyer le nom de la route sélectionnée pour connaitre la page appelée mais cela fait du code à rallonge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ render(controller("SdzReportBundle:Report:menuHorizontal", {'route' : app.request.attributes.get("_route") })) }}
    ... avec dans le twig des tests de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {% if route == "sdz_report_fiche_client" %}
         <li class="dropdown active">
    {% elseif route == "sdz_report_liste_clients" %}
         <li class="dropdown active">
    {% else %}
         <li class="dropdown">
     {% endif %}
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">CLIENT<b class="caret"></b></a>
                            <ul class="dropdown-menu"> 
                              <li><a href="{{ path('sdz_report_fiche_client') }}">Fiche Client</a></li>
                              <li><a href="{{ path('sdz_report_liste_clients') }}">Liste Clients</a></li>
                            </ul>
                          </li>
    Cela fonctionne mais si quelqu'un à mieux, ou plus court, ou plus lisible... je suis preneur.

    A+
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut
    tu peux essayer cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <li><a href="{{ path('page1') }}" {% if app.request.attributes.get('_route') == "page1" %}class="active"{% endif %}>Page1</a></li>
    <li><a href="{{ path('page2') }}" {% if app.request.attributes.get('_route') == "page2" %}class="active"{% endif %}>Page2</a></li>

Discussions similaires

  1. [HTML] Pb bouton menu actif (a:active)
    Par hkiller dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/11/2007, 12h04
  2. Réponses: 1
    Dernier message: 03/06/2006, 19h19
  3. menu actif surligné lorsqu'il est dans une frame
    Par vertalan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/06/2006, 15h38
  4. Ajouter dynamiquement un Item à un menu
    Par firejocker dans le forum MFC
    Réponses: 8
    Dernier message: 25/11/2005, 11h52
  5. Sélection des items du menu
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 04/03/2005, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo