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
Open the 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 docs
or 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)
The display_menu
method expects at least one argument; a Ruby object
that describes the menu hierarchy, as created by Nesta::Menu.for_path
.
The 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 yourmenu.txt
file 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