2014-09-16 1 views
3

Я новичок в Middleman и для жизни меня не могу динамически установить активный класс для моей навигации в подкаталоге и его детей.Middleman - активный класс на поддиректории и детей

У меня есть следующий вспомогательный набор, и он работает в подкаталоге (пример:/о /), однако это не касается его детей (например: /about/otherpage.html)

module CustomHelpers 
    def nav_link_to(link, url, opts={}) 
    if request.path == link 
     prefix = '<li class="active">' 
    else 
     prefix = '<li>' 
    end 
    prefix + link_to(link, url, opts) + "</li>" 
    end 
end 

Любая помощь будет оценена!

ответ

3

Проблема решена!

После укоренения в блогах посредников я обнаружил гениальное решение с сайта EmberJS, публично опубликованного на GitHub.

Чтобы уточнить, их помощник заключается в следующем:

def link_to_page name, url 
    path = request.path 
    current = path =~ Regexp.new('^' + url[1..-1] + '.*\.html') 

    if path == 'index.html' and name == 'about' 
     current = true 
    end 

    class_name = current ? ' class="active"' : '' 

    "<li#{class_name}><a href=\"#{url}\">#{name}</a></li>" 
    end 

А затем создать шаблон в уль тег:

<%= link_to_page 'Projects', '/projects' %> 

Это работает для вложенных каталогов и их детей тоже.

Надеюсь, что это поможет!

+0

Что такое 'имя == 'about''? – jwfrench

0

Вот еще короче версия:

в config.rb:

helpers do 
    def active_navigation(page) 
    current_page.url.include?(page) ? "active" : '' 
    end 
end 

и в шаблоне, просто определить путь, который вы хотели бы проверить:

<ul> 
    <li class="<%= active_navigation("/projects") %>"> 
    <%= link_to_page 'Projects', '/projects' %> 
    </li> 
</ul> 

Теперь на любой странице, где URL-адрес содержит «/ projects», li будет иметь «активный» класс.

Таким образом,/projects,/projects/project1,/projects/list и т. Д. Будут вызывать активный класс.