Hugo. Система шаблонов
Hugo. Система шаблонов.
Содержание
1 Система шаблонов (Hugo v0.146.0)
1.1 Общая информация
- Документация: https://gohugo.io/templates/new-templatesystem-overview/
1.2 Изменения в папке layouts
Папка
_default
удалена.- Сделать: переместить все файлы из
layouts/_default
вlayouts/
.
- Сделать: переместить все файлы из
Папка
layouts/partials
переименована вlayouts/_partials
.- Сделать: переименуйте папку.
Папка
layouts/shortcodes
переименована вlayouts/_shortcodes
.- Сделать: переименуйте папку.
Любая папка в
layouts
, которая не начинается с_
, представляет собой корень каталога страниц.- Он может быть вложен настолько глубоко, насколько это необходимо.
- Папки
_shortcodes
и_markup
можно размещать на любом уровне. - Сделать: никаких действий не требуется.
Нет верхнего уровня папок
layouts/taxonomy
илиlayouts/section
.- Сделать: переместите наверх
layouts/
с одним из типов страниц:section
,taxonomy
илиterm
в качестве базового имени или поместите макеты в таксономию Page path.
- Сделать: переместите наверх
Шаблон с именем
taxonomy.html
был кандидатом на оба типа страниц:term
иtaxonomy
.- Теперь это рассматривается только для
taxonomy
. - Сделать: создайте
taxonomy.html
иterm.html
или создать более общий макет, напримерlist.html
.
- Теперь это рассматривается только для
Для базовых шаблонов (например,
baseof.html
), в предыдущих версиях Hugo можно было добавить один идентификатор (layout, type, or kind) с дефисом перед ключевым словом baseof.- Сделать: переместите этот идентификатор после первой «точки», например, переименуйте
list-baseof.html
кbaseof.list.html
.
- Сделать: переместите этот идентификатор после первой «точки», например, переименуйте
Новый универсальный макет
all
.- Если у вас, например, есть
layouts/all.html
, и это единственный шаблон, этот макет будет использоваться для рендеринга всех HTML-страниц.
- Если у вас, например, есть
Убрали концепцию шаблона
_internal
.- Сделать: заменить конструкции типа
{{ template "_internal/opengraph.html" . }}
на{{ partial "opengraph.html" . }}
.
- Сделать: заменить конструкции типа
Идентификаторы, которые можно использовать в имени файла шаблона относятся:
- к одному из типов страниц (
home
,page
,section
,taxonomy
, илиterm
; - к одному из стандартных макетов (
list
,single
, илиall
), - к пользовательскому макету (как определено в поле
layout
); - языку (например,
en
); - выходному формату (например,
html
,rss
); - суффикс, представляющий тип носителя.
- Например,
all.en.html
иhome.rss.xml
.
- к одному из типов страниц (
Не существует такого понятия, как шаблон
index.html
для домашней страницы.- Сделать: переименовать
index.html
вhome.html
.
- Сделать: переименовать
2 Изменения в порядке поиска шаблонов
Мы объединили поиск шаблонов, чтобы он работал одинаково для всех типов шаблонов . Предыдущая конфигурация была очень сложной для понимания и имела огромное количество вариантов. Новая конфигурация призвана быть естественной и не доставлять сюрпризов.
Идентификаторы, используемые при взвешивании шаблона, в порядке важности:
Идентификатор | Описание |
---|---|
Пользовательский макет | Обычай layout набрано на первой полосе. |
Типы страниц | Один из home , section , taxonomy , term , page . |
Стандарт макетов 1 | list или single . |
Формат вывода | Формат вывода (например, html , rss ). |
Стандартные макеты 2 | all . |
Язык | Язык (например, en ). |
Тип носителя | Тип носителя (например, text/html ). |
Путь к странице | Путь к странице (например, /blog/mypost ). |
Тип |
Для шаблонов, размещенных в =layouts=Если папка частично или полностью совпадает с путем к странице , более точное совпадение вверх будет считаться лучшим . В примере структуры папки ниже это означает, что:
layouts/docs/api/_markup/render-link.html=будет использоваться для отображения ссылок из пути страницы =/docs/api
и ниже.layouts/docs/baseof.html=будет использоваться как базовый шаблон для пути к странице =/docs
и ниже.layouts/tags/term.html=будет использоваться для всех =term=рендеринг в =tags=таксономия, за исключением =blue=термин, который будет использовать =layouts/tags/blue/list.html
.
3 Пример структуры папки
layouts
├── baseof.html
├── baseof.term.html
├── home.html
├── page.html
├── section.html
├── taxonomy.html
├── term.html
├── term.mylayout.en.rss.xml
├── _markup
│ ├── render-codeblock-go.term.mylayout.no.rss.xml
│ └── render-link.html
├── _partials
│ └── mypartial.html
├── _shortcodes
│ ├── myshortcode.html
│ └── myshortcode.section.mylayout.en.rss.xml
├── docs
│ ├── baseof.html
│ ├── _shortcodes
│ │ └── myshortcode.html
│ └── api
│ ├── mylayout.html
│ ├── page.html
│ └── _markup
│ └── render-link.html
└── tags
├── taxonomy.html
├── term.html
└── blue
└── list.html
Старый способ делал это очень трудным/невозможным, например, переопределить =_internal/disqus.html=в теме. Теперь можно просто создать частичный вариант с тем же именем. ↩︎
The =type=набор в начале текста эффективно заменит =section=папка в пути к странице при выполнении поиска. ↩︎