
Mapa do Site
Hoje eu precisei criar o “Mapa do Site”, conforme imagem acima, procurei por alguns plugins para fazer isso, mas infelizmente não encontrei nada da forma que eu queria, então resolvi implementar o meu próprio helper.
Através das tags htmls ul e li é possível gerar essa estrutura.
Para implementar essa funcionalidade eu desenvolvi o seguinte helper:
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 29 30 31 32 | module SitemapHelper def sitemap map = { link_to("Página Inicial", root_url) => { "Informação" => [link_to("Notícias", histories_path), link_to("Newsletters", newsletters_path)], "Capacitação e Aperfeiçoamento" => [link_to("Serviços", services_path), link_to("Institucionais", institutionals_path), link_to("Eventos", events_path), link_to("Melhores Práticas", best_practices_path), link_to("Podcasts", podcasts_path), link_to("Tvs", tvs_path), link_to("Degustações", tastings_path)], "Editora" => [link_to("Produtos", products_path)], link_to("Grupo", groups_path) => nil } } content_tag(:ul, generate_map(map)) end def generate_map(elements) html = '' elements.each do |key, value| html << content_tag(:li, key) if !value.nil? and value.length > 0 html << content_tag(:ul, generate_map(value.sort)) end end return html end end |
No código acima eu criei um método chamado sitemap, dentro desse método existe um hash chamado map, nesse hash eu defino a hierarquia dos links.
O outro método é o generate_map, ele é responsável por gerar a estrutura html em listas através das tags html ul e li. Esse método usa recursividade (o grande amigo dos programadores ;-)).
Feito tudo isso, agora no template eu só chamo o helper, por exemplo no index.html.erb:
1 | <%= sitemap %> |
É possível chamar esse helper nos templates de erro 404, assim melhora a navegação para o usuário.
Se você gostou desse texto e acha que ajudou você, me recomende:
.
