Menús dinámicos

Posted by vigosan, Mon Feb 25 12:24:00 UTC 2008

No se si el título refleja exactamente lo que pretendo hacer, pero de lo que se trata es de ayudarnos de algún helper para tener nuestro propio constructor de menús; voy a comentaros mi idea y si alguien tiene alguna mejor que la comente.

Primero en application.rb he defino la estructura que tendrá el menú, utilizando arrays, y en los que indico el nombre del enlace y la url. Además, mostrará un menú diferente dependiendo si el usuario está validado o no.

# application.rb
  helper_method navigation_links

  def navigation_links
    if logged_in?
      return [
        [ "Logout", "#{logout_path}" ]
      ]
    else
      return [
        [ "Home", "#{root_path}" ],
        [ "Log in", "#{login_path}" ],
        [ "Signup", "#{signup_path}" ]
      ]
    end
  end

Ahora application_helper.rb escribo las funciones que generarán el menú:

  def link_for(label, path = {})
    if controller.controller_name == path.split("/").last
      content_tag :li, link_to(label, path, { "class"=> "current" })
    else
      content_tag :li, link_to(label, path)
    end
  end

  def links_for_navigation(options = {})
    class_name = options[:class] || "navigation_links" 
    code = "<ul class=\"#{class_name}\">\n" 
    links = []
    navigation_links.each do |label, path|
      links.push link_for(label, path)
    end
    code << links.join(separator)
    code << "</ul>" 
  end

  def separator
    # quitar comentario si quieres añadir un separador
    # %{ <span class="separator"> | </span> }
  end

Y en la vista:

<div id="sidebar">
  <%= links_for_navigation %>
</div>

Lo dicho, si alguien tiene una idea mejor, que no dude en compartirla.

Filed Under: Rails | Tags:

Comments