Меню
Ты можешь это сделать:
- Размещение контента в одном или нескольких меню
- Обработка вложенных меню с неограниченной глубиной
- Создание пунктов меню без привязки к какому-либо контенту
- Различать активный элемент (и активную ветвь)
Что такое меню в Hugo?
menu - это именованный массив пунктов меню, доступных по имени через переменную сайта .Site.Menus
. Например, Вы можете получить доступ к главному меню main
Вашего сайта через .Site.Menus.main
.
Смотрите свойства элемента меню для получения информации обо всех переменных и функциях, связанных с элементом меню.
Добавить контент в меню
Hugo позволяет Вам добавлять контент в меню через front matter.
Простое
Если все, что Вам нужно сделать, это добавить запись в меню, простая форма подойдет.
Одиночное меню
---
menu: "main"
---
Мультименю
---
menu: ["main", "footer"]
---
Продвинутое
---
menu:
docs:
parent: 'extras'
weight: 20
---
Добавление записей, не относящихся к содержанию, в меню
Вы также можете добавлять элементы в меню, которые не связаны с частью контента. Это происходит в файле config
file Вашего проекта Hugo.
Вот пример фрагмента, извлеченного из файла конфигурации:
menu:
main:
- identifier: about
name: about hugo
pre: <i class='fa fa-heart'></i>
url: /about/
weight: -110
- name: getting started
post: <span class='alert'>New!</span>
pre: <i class='fa fa-road'></i>
url: /getting-started/
weight: -100
[menu]
[[menu.main]]
identifier = "about"
name = "about hugo"
pre = "<i class='fa fa-heart'></i>"
url = "/about/"
weight = -110
[[menu.main]]
name = "getting started"
post = "<span class='alert'>New!</span>"
pre = "<i class='fa fa-road'></i>"
url = "/getting-started/"
weight = -100
{
"menu": {
"main": [
{
"identifier": "about",
"name": "about hugo",
"pre": "\u003ci class='fa fa-heart'\u003e\u003c/i\u003e",
"url": "/about/",
"weight": -110
},
{
"name": "getting started",
"post": "\u003cspan class='alert'\u003eNew!\u003c/span\u003e",
"pre": "\u003ci class='fa fa-road'\u003e\u003c/i\u003e",
"url": "/getting-started/",
"weight": -100
}
]
}
}
Вложенность
Все вложение контента выполняется через поле parent
.
Родительский элемент записи должен быть идентификатором другой записи. Идентификатор должен быть уникальным (в пределах меню).
Для определения идентификатора используется следующий порядок:
.Name > .LinkTitle > .Title
Это означает, что .Title
будет использоваться, если не присутствует .LinkTitle
и т.д. На практике, .Name
и .Identifier
используются только для структурирования отношений и поэтому никогда не отображаются.
В этом примере верхний уровень меню определен в Вашем файле сайта config
. Все записи содержимого прикрепляются к одной из этих записей через поле .Parent
.
Параметры
Вы также можете добавить определяемый пользователем контент в пункты меню через поле params
.
Типичным вариантом использования является определение настраиваемого параметра для добавления класса css к определенному пункту меню.
menu:
main:
- identifier: about
name: about hugo
params:
class: highlight-menu-item
pre: <i class='fa fa-heart'></i>
url: /about/
weight: -110
[menu]
[[menu.main]]
identifier = "about"
name = "about hugo"
pre = "<i class='fa fa-heart'></i>"
url = "/about/"
weight = -110
[menu.main.params]
class = "highlight-menu-item"
{
"menu": {
"main": [
{
"identifier": "about",
"name": "about hugo",
"params": {
"class": "highlight-menu-item"
},
"pre": "\u003ci class='fa fa-heart'\u003e\u003c/i\u003e",
"url": "/about/",
"weight": -110
}
]
}
}
Рендеринг меню
Смотрите шаблоны меню для получения информации о том, как отображать меню Вашего сайта в Ваших шаблонах.