Активный пункт меню RoR - PullRequest
       1

Активный пункт меню RoR

2 голосов
/ 17 сентября 2010

Как я могу получить активный пункт меню? Меню генерируется в цикле

<ul id="menu">  
  <% for page in Page.roots %>  
    <li><%= link_to h(page.name), page %></li>    
  <% end %>
  </ul> 

Я хочу использовать другое свойство css для этого элемента. Есть идеи? Желательно JS, JQuery ...

Ответы [ 3 ]

0 голосов
/ 17 сентября 2010

Там есть link_to_unless_current, который оборачивает ссылку в тег a, если ссылка не является текущей страницей (показывает только текст без тега a).С некоторыми хитростями CSS вы можете сделать это по-другому.Я обычно использую этот подход:

<ul id="menu"><%= Page.roots.map do |page|
  content_tag :li, link_to_unless_current(h(page.name), page)
end %></ul>

и следующий CSS:

ul#menu li { ...current/selected appearance... }
ul#menu li a { ...linked/normal appearance... }
0 голосов
/ 17 сентября 2010

Я склонен создавать своего собственного помощника для таких вещей:

#navigation_helper.rb
def nav_item(name, link, hilight = false)
  content_tag :li, link_to(name, link), :class => ("selected" if hilight)
end

Тогда, по вашему мнению, просто передайте соответствующий булев помощнику:

<ul id="menu">
  <%= nav_item "Foo admin", admin_path, (params[:controller] == "admin") %>
  <%= nav_item "Bar page", pages_path(@page), (params[:controller] == "pages" && params[:action] == "show" && params[:id] == @page.id) %>
  <%= nav_item "Baz example", example_path, any_old_helper? %>
</ul>

Вам нужно подумать о способе реализации этого метода для вашей динамически генерируемой коллекции страниц, но там, где есть желание, есть способ. :)

0 голосов
/ 17 сентября 2010
$("#menu a[href$='+location.pathname+']").addClass('current');

Селектор #menu a найдет все ссылки в вашем меню.[href$='+location.pathname+'] это найдет ссылку, которая заканчивается ($=) тем же путем, что и текущая страница, а затем добавляет .addClass('current') класс css current

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...