Working with menus
Menus are optional; not all themes will necessarily use a menu, and you don’t have to fill it in if you don’t want to. Having said that, if you do, you’ll need to know what to do.
The file format
content-demo/menu.txt file and compare what you can see to the menu that’s visible in the browser.
You’ll notice that each line in the file refers to the path to one of the files in the
pages directory, with the file extension removed. You’ll also notice that a menu item can have nested menu items beneath it, and that each sub level is indented by two spaces.
So you could have a
menu.txt file that looked like this:
/ blog docs marking-up-pages examples/using-markdown examples/using-textile examples/using-haml adding-attachments menu-editing publishing-a-feed support faq knowledge-base about signup
/ is special and refers to the home page. All the other lines in that file refer to the path of one of the pages on your site, relative to the home page.
What gets displayed?
The entire menu doesn’t necessarily have to be displayed on the page at once; you can pluck out a small section of the hierarchy (such as just the
support sections) and render that on the page.
The primary navigation at the top of this page, and the documentation menu in the sidebar were both rendered from this menu.txt file.
Nesta provides you with helper methods for rendering the HTML.
It’s probably most easily understood by having a look at an example. The documentation menu in the sidebar of this page (over there on the right) was rendered by this snippet of Haml:
%nav.categories - display_menu(Nesta::Menu.for_path('/docs'), :class => "menu", :levels => 3)
display_menu method expects at least one argument; a Ruby object that describes the menu hierarchy, as created by
display_menu method also takes an optional hash of options. The keys of the hash are:
:class– Sets the HTML class of the top level <ul> tag that is generated to hold the menu items.
:levels– Controls how deep into a nested menu structure you want to go; if it’s greater than one (and your
menu.txtfile contains a nested hierarchy) you’ll get <ul> tags for your submenus of your submenus. Defaults to 2.
Take a look at how the menu.txt file for nestacms.com was used to render all the menus on the site:
- The primary navigation: header.haml
- Links to docs on the home page: index.haml
- Links to docs in the side bar: categories.haml