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
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
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.
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.
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.