2010-11-26 23 views
0

Ich habe ein HTML-Menü in einem Teil und ich möchte die Menüpunkte dynamisch machen (Farben ändern), je nachdem, auf welcher Seite wir sind. Wie kann ich das machen?Rails 3 - Dynamic Menüeintrag

Dank

Antwort

2

Ein gemeinsamer Trick, der das Aussehen von Menüs zu ändern, verwendet wird, um die aktuelle Seite zu reflektieren ist ein CSS-Selektor oder Klasse zu setzen, die den Namen der Seite in dem Body-Tag widerspiegelt.

Sobald Sie dies getan haben, können Sie verschiedene Stile für jede Variation des Seitennamens erstellen, die Sie möchten.

Zum Beispiel:

<!-- @page_name is 'home' in this example --> 
<body class="<%= @page_name %>"> 

    <!-- Lots of html here --> 

    <div class="nav_links"> 
    <ul id="nav"> 
     <li class="home"><a href="/"><span>Home</span></a></li> 
     <li class="about_us"><a href="/about"><span>About us</span></a></li> 
     <li class="store"><a href="/store"><span>Shop</span></a></li> 
    </ul> 
    </div> 

Dann kann die CSS alles, was Sie wollen, aber so etwas wie:

body.home div.nav_links ul li.home { /* blah blah */ } 
body.about_us div.nav_links ul li.about_us { /* blah blah */ } 

Diese Methode sorgt für eine gute Trennung von Bedenken: die visuellen Stile (Ändern Ihrer Farben) bleiben Sie in Ihren Stylesheets und außerhalb Ihres Codes.

0

Erstellen Sie einen Helfer, um das HTML für das Menü zu generieren, und verwenden Sie die Variable controller.controller_name, um die Klasse zu ändern.

0

Ich hatte das gleiche Problem und ich erstellte zu Hilfsmethoden, um den aktiven Menüpunkt einzustellen.

def active_tab(id) 
    if id == menu_entry_id 
     'active' 
    else 
     'tab' 
    end 
    end 

    def menu_entry_id 
    if controller_path.match('/') 
     controller_path.gsub!('/', '_') 
    else 
     controller_path 
    end 
    end 

Beispielmenü

%li{:class => "#{active_tab 'admin_dashboard'}"}= link_to 'Dashboard', admin_dashboard_path 
%li{:class => "#{active_tab 'admin_customers'}"}= link_to 'Customers', admin_customers_path 

Wie Sie im active_tab sehen kann ich das erwartete Ergebnis aus dem controller_path passieren (/ ersetzt durch _). Die Tabelle active_tab vergleicht ihre Eingabe mit dem Ergebnis von controller_path und gibt sie entweder als viel oder nur als tab zurück.

Ich denke, es könnte andere Wege geben, es zu tun, aber ich konnte mir nichts besseres einfallen lassen.