Связанный контент
Hugo использует набор факторов для определения связанного содержания страницы на основе параметров Front Matter. Это может быть настроено на желаемый набор индексов и параметров или оставлено Хьюго по умолчанию конфигурация связанного содержимого.
Список связанного содержимого
Чтобы перечислить до 5 связанных страниц (которые имеют одинаковые параметры date или keyword), достаточно просто включить что-то похожее на этот фрагмент в свой одностраничный шаблон:
Методы
Вот список «связанных» методов, доступных в коллекции страниц, например .RegularPages
.
СТРАНИЦА .Related
Возвращает коллекцию страниц, связанных с данной.
{{ $related := .Site.RegularPages.Related . }}
.RelatedIndices СТРАНИЦА INDICE1 [INDICE2 …]
Возвращает коллекцию страниц, связанных с заданной страницей, ограниченной списком индексов.
{{ $related := .Site.RegularPages.RelatedIndices . "tags" "date" }}
.RelatedTo KEYVALS [KEYVALS2 …]
Возвращает коллекцию страниц, связанных вместе набором индексов и их совпадением.
Чтобы построить этот набор и передать их в качестве аргумента, нужно использовать функцию keyVals
, где первым аргументом будет indice
, а последующие - его потенциальные совпадения matches
.
{{ $related := .Site.RegularPages.RelatedTo ( keyVals "tags" "hugo" "rocks") ( keyVals "date" .Date ) }}
Настроить связанный контент
Hugo предоставляет разумную конфигурацию связанного содержимого по умолчанию, но Вы можете настроить ее в своей конфигурации на глобальном или языковом уровне, если это необходимо.
Конфигурация по умолчанию
Без какой-либо related
конфигурации, установленной в проекте, методы связанного содержимого Hugo будут использовать следующее.
related:
includeNewer: false
indices:
- name: keywords
weight: 100
- name: date
weight: 10
threshold: 80
toLower: false
[related]
includeNewer = false
threshold = 80
toLower = false
[[related.indices]]
name = "keywords"
weight = 100
[[related.indices]]
name = "date"
weight = 10
{
"related": {
"includeNewer": false,
"indices": [
{
"name": "keywords",
"weight": 100
},
{
"name": "date",
"weight": 10
}
],
"threshold": 80,
"toLower": false
}
}
Обратите внимание, что если Вы настроили теги tags
в качестве таксономии, теги tags
также будут добавлены в конфигурацию по умолчанию с весом 80
.
Пользовательская конфигурация должна быть установлена с использованием того же синтаксиса.
Параметры конфигурации верхнего уровня
- threshold
- Значение от 0 до 100. Меньшее значение даст больше совпадений, но, возможно, не столь актуальных.
- includeNewer
- Установите значение
true
, чтобы включить страницы более новые, чем текущая страница, в список связанного содержимого. Это будет означать, что вывод для старых сообщений может измениться по мере добавления нового связанного контента. - toLower
- Установите значение
true
для ключевых слов в нижнем регистре как в индексах, так и в запросах. Это может дать более точные результаты при небольшом снижении производительности. Обратите внимание, что это также можно установить для каждого индекса.
Параметры конфигурации по индексу
- name
- Имя индекса. Это значение отображается непосредственно на параметр страницы. Hugo поддерживает строковые значения (в примере
author
) и списки (tags
,keywords
и т.д.) и объекты времени и даты. - weight
- Целочисленный вес, который указывает насколько важен этот параметр по сравнению с другими параметрами. Это может быть 0, что означает отключение этого индекса, или даже отрицательное значение. Попробуйте использовать разные значения, чтобы узнать, что лучше всего подходит для Вашего контента.
- pattern
- В настоящее время это актуально только для дат. При перечислении связанного контента мы можем захотеть перечислить контент, который также близок по времени. Установка «2006» (значение по умолчанию для индексов даты) в качестве шаблона для индекса даты добавит веса страницам, опубликованным в том же году. Для более загруженных блогов лучшим вариантом по умолчанию может быть «200601» (год и месяц).
- toLower
- Смотрите выше.
Соображения производительности
Быстрота - это второе имя Хьюго, и мы бы не выпустили эту функцию, если бы она не была быстрой.
Эта функция была в резервном журнале и многие давно просили ее. Эта недавняя разработка началась с этой ветки в Twitter:
Holy smokes! Build time dropped to 1.2 seconds!
— Scott S. Lowe (@scott_lowe) August 18, 2017
Скотт С. Лоу удалил раздел «Связанное содержимое», созданный с помощью функции шаблона intersect
для тегов, и время сборки упало с 30 до менее 2 секунд в его блоге размером 1700 страниц с контентом.
Теперь он должен иметь возможность добавить улучшенную версию раздела «Связанное содержимое», не отказываясь от быстрой перезагрузки в реальном времени. Но стоит отметить, что:
- Если Вы не используете какой-либо из
Related
методов, Вы не будете использовать функцию «Связать контент», и производительность будет такой же, как и раньше. - Вызов
.RegularPages.Related
и т.д. создаст один инвертированный индекс, также иногда называемый списком публикаций, который будет повторно использоваться для любых поисков в той же самой коллекции страниц. Выполнение этого в дополнение к, например, вызову.Pages.Related
будет работать, как ожидалось, но создаст один дополнительный инвертированный индекс. Это все равно должно быть очень быстро, но о нем стоит помнить, особенно для крупных сайтов.