У меня были проблемы с выделением «текущего пункта меню» в Hugo, пока я его использую (не менее двух лет).
Это представляется возможным, если я определяю меню, используя передний план в моих файлах содержимого (т.е. индивидуально добавляю каждую часть содержимого в меню). Однако я не хочу засорять переднюю часть моих файлов содержимого этой информацией, особенно учитывая то, как можно определять свои меню с помощью основного файла конфигурации.
Вот как я объявляю свое меню в моем файле конфигурации (я предпочитаю использовать JSON вместо YAML):
"menu": {
"main": [
{
"name": "Home",
"weight": 1,
"url": "/"
},
{
"name": "About",
"weight": 2,
"url": "/about"
},
{
"name": "Blog",
"weight": 3,
"url": "/blog"
},
{
"name": "Contact",
"weight": 4,
"url": "/contact"
}
]
},
А вот и мой шаблон меню
<ul class="nav">
{{ $currentPage := . }}
{{ range .Site.Menus.main }}
{{ if .HasChildren }}
<li class="nav-item nav-item--has-submenu{{ if $currentPage.HasMenuCurrent "main" . }} nav-item--active{{ end }}">
<a class="nav-link" href="javascript:;" title="{{ .Name }}">
{{ .Pre }}
<span>{{ .Name }}</span>
</a>
<ul class="nav-submenu">
{{ range .Children }}
<li class="nav-item{{ if $currentPage.IsMenuCurrent "main" . }} nav-item--active{{ end }}">
<a class="nav-link" href="{{ .URL }}" title="{{ .Name }}">
<span>{{ .Name }}</span>
</a>
</li>
{{ end }}
</ul>
</li>
{{else}}
<li class="nav-item">
<a class="nav-link" href="{{ .URL }}" title="{{ .Name }}">
{{ .Pre }}
<span>{{ .Name }}</span>
</a>
</li>
{{end}}
{{end}}
</ul>
Я знаю, что приведенная выше разметка специально проверяет переднюю часть каждой части контента, и я понимаю, почему она не работает. Все, что я хотел бы знать, это то, какие изменения я должен внести, чтобы выделить текущий пункт меню.
Я думаю, что определение меню через файл конфигурации предназначено для добавления в меню ссылок, отличных от Hugo, и, следовательно, нет необходимости выделять эти элементы. Возможно ли это вообще, или мне придется признать, что мне нужно использовать фронтматтер в моем контенте, чтобы создавать свои меню?
Спасибо