Расскажу как делаю я.
Сами пункты меню у лежат в отдельном json файле (многая инфа так хранится)
data/nav.json[
{
"title": "Главная",
"url": "home.html"
},
{
"title": "Каталог",
"url": "catalog.html"
},
{
"title": "Акции",
"url": "actions.html"
}
]
Есть миксин для вывода меню, он может быть разной сложности в зависимости от задачи, покажу простой:
blocks/nav.jademixin nav(data, current)
nav.nav&attributes(attributes)
if(data && data.length)
ul.nav__list
each item, index in data
li.nav__item.nav-item(class=(index === current ? "nav-item--current" : undefined))
a(href=item.url).nav-item__link
span.nav-item__title #{item.title}
Этот миксин принимает 2 аргумента: массив с пунктами меню и индекс текущего пункта.
В части страницы, где меню выводится мы вызываем миксин
parts/header.jade+nav(getData('nav'), currentNav)
А переменную currentNav, с индексом нужного на пункта меню, мы передаем непосредственно со страницы:
page.jade
extends layouts/_default
block head
- pageTitle = 'Заголовок страницы';
block header
- currentNav = 1;
block content
Для понимания кусочек
layouts/_defaultdoctype html
html(lang="ru-RU" class="no-js")
include ../parts/_head
body
block header
include ../parts/_header
.content#content
block content
block footer
include ../parts/_footer