Списки таксономии Hugo

Матеріал з Wiki.Zina
Перейти до навігації Перейти до пошуку

←Hugo

Страница словаря со списком терминов (terms)

[ред. | ред. код]

Например, есть словарь categories, заданный в config.toml так:

[taxonomies]
  category = "categories"

Важно различать единственную и множественную форму названия словаря. В примерах дальше они выделены полужирным.

Словари нужно специально прописывать в config.toml, а термины, относящиеся к словарям, не нужно. Для создания термина достаточно упомянуть его в коде конечной страницы во frontmatter.

Например, чтобы отнести страницу к термину Building в словаре categories, просто пропишите в странице:

---
categories:
- Building
---

При этом сразу будет создана страница термина http://localhost:1313/categories/building/

Чтобы увидеть список всех терминов, относящихся к словарю category, нужно открыть страницу словаря http://localhost:1313/categories/

Для этой страницы будет использован самый подходящий шаблон из существующих файлов (сверху — наиболее подходящие):

layouts/categories/category.terms.html
layouts/categories/terms.html
layouts/categories/list.html

layouts/taxonomy/category.terms.html
layouts/taxonomy/terms.html
layouts/taxonomy/list.html

layouts/category/category.terms.html
layouts/category/terms.html
layouts/category/list.html

layouts/_default/category.terms.html # список терминов словаря 'category'
layouts/_default/terms.html          # список терминов на страницах словарей
layouts/_default/list.html           # самый базовый шаблон, общий для всех списков контента

Более полный список порядка шаблонов: Examples: Layout Lookup for Taxonomy Terms Pages

В шаблоне нужно разместить следующий код.

Самый простой вариант кода

[ред. | ред. код]
{{ range .Pages }}
  <p><a href="{{ .Permalink }}">{{ .Title }}</a></p>
{{ end }}

Если для термина создана страница типа content/categories/building/_index.ru.md, то в качестве названия термина будет взят title из frontmatter страницы.

URL ссылки также может быть изменен в поле url во frontmatter страницы.

Код с параметрами терминов из frontmatter

[ред. | ред. код]
{{ range .Pages }}
  <p>
    <a href="{{ .Permalink }}">{{ .Title }}</a>
    {{ with .Params.description }}
        <br><small>{{ . }}</small>
    {{ end }}
  </p>
{{ end }}

Код с сортировкой терминов

[ред. | ред. код]

Сортировка по алфавиту по названиям терминов:

{{ range .Data.Terms.Alphabetical }}
  <p><a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a>  ({{ .Term }})</p>
{{ end }}

Сортировка будет не по .Page.Title, а по .Term.

Обратная сортировка: .Data.Terms.Alphabetical.Reverse

Сортировка по алфавиту по названиям терминов в страницах терминов:

{{ range .Pages.ByTitle }}
  <p><a href="{{ .Permalink }}">{{ .Title }}</a></p>
{{ end }}

Обратная сортировка: .Pages.ByTitle.Reverse

Сортировка по количеству страниц в каждом термине:

{{ range .Data.Terms.ByCount }}
  <p><a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a> ({{ .Count }})</p>
{{ end }}

Обратная сортировка: .Data.Terms.ByCount.Reverse

Сортировка по дате:

{{ range .Data.Pages.ByDate }}
  <p><a href="{{ .Permalink }}">{{ .Title }}</a> ({{ .Date | dateFormat "2006-01-02" }})</p>
{{ end }}

Обратная сортировка: .Data.Pages.ByDate.Reverse

Дополнительно — информация из первого материала в термине

[ред. | ред. код]
<div class="columns is-mobile is-multiline">
    {{ range .Data.Terms.ByCount }}
    <div class="column is-half-mobile is-one-third-tablet is-one-quarter-desktop is-one-fifth-widescreen">
        <div class="card">
            <div class="card-image">
                <a href="{{ .Page.Permalink }}">
                    <figure class="image is-3by2">
                        {{ $firstChild := index .Pages 0 }}
                        {{ with $firstChild.Params.images }}
                        <img src="{{ index . 0 }}" alt="">
                        {{ end }}
                    </figure>
                </a>
            </div>
            <div class="card-content has-text-centered">
                <div>
                    <a class="title is-5 is-size-6-mobile" href="{{ .Page.Permalink }}">{{ .Page.Title }}</a>
                    {{ $pageCount := len .Pages }}
                    <p>{{ $pageCount }} post{{ if ne $pageCount 1 }}s{{ end }} </p>
                </div>
            </div>
        </div>
    </div>
    {{ end }}
</div>

Подробнее

Дополнительно — информация из frontmatter термина

[ред. | ред. код]
{{ range .Data.Terms.ByCount }}
<li>
  <a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a>
  {{ with $.Site.GetPage "taxonomy" .Term }}
    {{ if .Params.icon }}
      <img src="{{ .Params.icon }}" alt="{{ .Page.Title }}">
    {{ end }}
  {{ end }}
</li>
{{ end }}

Страница термина со списком относящихся к нему страниц (taxonomy)

[ред. | ред. код]

Чтобы увидеть список всех страниц сайта, относящихся к термину Building словаря category, нужно открыть страницу http://localhost:1313/categories/building/

Для этой страницы будет использован самый подходящий шаблон из существующих файлов (сверху — наиболее подходящие):

layouts/categories/category.html
layouts/categories/taxonomy.html
layouts/categories/list.html

layouts/taxonomy/category.html
layouts/taxonomy/taxonomy.html
layouts/taxonomy/list.html

layouts/category/category.html
layouts/category/taxonomy.html
layouts/category/list.html

layouts/_default/category.html # список материалов словаря 'category'
layouts/_default/taxonomy.html # список материалов на страницах таксономии
layouts/_default/list.html     # самый базовый шаблон, общий для всех списков контента

Еще более полный список порядка шаблонов: Examples: Layout Lookup for Taxonomy List Pages

В шаблоне нужно разместить следующий код.

Самый простой вариант кода

[ред. | ред. код]
{{ range .Data.Pages }}
  <p><a href="{{ .Permalink}}">{{ .Title }}</a></p>
{{ end }}

Список терминов определенного словаря

[ред. | ред. код]

Выведем все термины словаря categories:

{{ range $cat, $tax := .Site.Taxonomies.categories }}
  <li><a href="/categories/{{ $cat | urlize }}/">{{ replace $cat "-" " " | title }}</a> </li>
{{ end }}

Список материалов определенного термина

[ред. | ред. код]

Выведем все материалы термина art в словаре clients:

{{ range .Site.Taxonomies.clients.art }}
  <li><a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a></li>
{{ end }}

То же самое, но только 5 штук и с сортировкой по полю order:

{{ $term := "art" }}
{{ $taxonomy := index .Site.Taxonomies.clients $term }}
{{ range first 5 (sort $taxonomy.Pages "Params.order" "desc") }}
  <li><a href="{{ .Permalink }}">{{ .Title }}</a></li>
{{ end }}

Список терминов любого словаря с выводом материалов каждого термина

[ред. | ред. код]
{{ $data := .Data }}
{{ range $key,$value := .Data.Terms.ByCount }}
  <h2><a href="{{ $data.Plural }}/{{ $value.Name | urlize }}/">{{ replace $value.Name "-" " " | title }}</a> ({{ $value.Count }})</h2>
  <ol>
  {{ range $value.Pages.ByDate }}
    <li><a href="{{ .Permalink }}">{{ .Title }}</a></li>
  {{ end }}
  </ol>
{{ end }}

Количество материалов, относящихся к термину

[ред. | ред. код]

Выведем число страниц сайта, относящихся к термину art словаря categories:

{{ .Site.Taxonomies.categories.art.Count }}

См. также

[ред. | ред. код]