Как хранить превью-изображения в папке пакета страниц для сайтов Hugo с темой Mainroad

Сохранение всех материалов, связанных со страницей, в одной папке...

Содержимое страницы

Долгое время меня мучила эта навязчивая идея поместить превью-изображения страниц в статический каталог.
Это касается тем Mainroad, Rodster и подобных.

Мне нравится организовывать контент Hugo в виде пакетов страниц,
и я предпочитаю хранить все изображения, связанные с страницей, внутри этого пакета страниц.

изображение пакета страниц

И вот я представляю вам решение!

Как сохранить превью-изображения темы Mainroad (и подобных) в папке пакета страниц

Просто вставьте этот текст в файл ./layouts/partials/post_thumbnail.html,
и вы сможете хранить изображения в любом месте из папки пакета и статического каталога :).

{{- if $thumbnail := .page.Params.thumbnail }}
    {{- $class := .class }}
    {{- $visibility := .page.Site.Params.thumbnail.visibility | default (slice "list" "post") }}

    {{- $valueType := printf "%T" $thumbnail -}}
    {{- $isMap := in $valueType "map" -}}
    {{- if $isMap }}
        {{ $visibility = default (slice "list" "post") (default .page.Site.Params.thumbnail.visibility $thumbnail.visibility) }}
        {{ $thumbnail = $thumbnail.src }}
    {{- end }}

    {{- if in $visibility $class }}
    {{- $thumbnailURL := "" }}
    
    {{- /* Попробуйте сначала найти изображение как ресурс страницы (для пакетов страниц) */ -}}
    {{- $resource := .page.Resources.GetMatch $thumbnail }}
    {{- if $resource }}
        {{- $thumbnailURL = $resource.RelPermalink }}
    {{- else }}
        {{- /* В случае неудачи использовать изображение из статического каталога с помощью relURL */ -}}
        {{- $thumbnailURL = $thumbnail | relURL }}
    {{- end }}
    
    <figure class="{{ with $class }}{{ . }}__thumbnail {{ end }}thumbnail">
        {{ if eq $class "list" }}<a class="thumbnail__link" href="{{ .page.RelPermalink }}">{{ end }}
        <img class="thumbnail__image" src="{{ $thumbnailURL }}" alt="{{ .page.Title }}">
        {{ if eq $class "list" }}</a>{{ end }}
    </figure>
    {{- end }}
{{- end }} 

Как вы видите из комментариев, этот замечательный фрагмент шаблона пытается сгенерировать ссылку на изображение, хранящееся в пакете страниц,
и если изображение не найдено, он переходит к стандартному варианту — статическому каталогу.
Таким образом, он совместим с предыдущими версиями!

Приятного использования!

Счастливого hugoing!

Полезные ссылки