summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/content/templates/rss.md8
-rw-r--r--docs/content/templates/terms.md14
-rw-r--r--hugolib/node_as_page_test.go10
-rw-r--r--hugolib/page.go11
-rw-r--r--hugolib/site.go2
-rw-r--r--hugolib/site_render.go2
-rw-r--r--hugolib/taxonomy_test.go22
7 files changed, 60 insertions, 9 deletions
diff --git a/docs/content/templates/rss.md b/docs/content/templates/rss.md
index d390b4306..fe445469a 100644
--- a/docs/content/templates/rss.md
+++ b/docs/content/templates/rss.md
@@ -48,6 +48,14 @@ Hugo will use the following prioritized list. If a file isn’t present, then th
* /themes/`THEME`/layouts/\_default/rss.xml
* [Embedded rss.xml](#the-embedded-rss-xml:eceb479b7b3b2077408a2878a29e1320)
+### Taxonomy Terms RSS
+
+* /layouts/taxonomy/`SINGULAR`.terms.rss.xml
+* /layouts/\_default/rss.xml
+* /themes/`THEME`/layouts/taxonomy/`SINGULAR`.terms.rss.xml
+* /themes/`THEME`/layouts/\_default/rss.xml
+* [Embedded rss.xml](#the-embedded-rss-xml:eceb479b7b3b2077408a2878a29e1320)
+
## Configuring RSS
diff --git a/docs/content/templates/terms.md b/docs/content/templates/terms.md
index 378bd4df8..f81fc8f71 100644
--- a/docs/content/templates/terms.md
+++ b/docs/content/templates/terms.md
@@ -57,6 +57,7 @@ Taxonomy Terms pages will additionally have:
* **.Data.Singular** The singular name of the taxonomy
* **.Data.Plural** The plural name of the taxonomy
+* **.Data.Pages** (or as **.Pages**) The taxonomy Terms index pages
* **.Data.Terms** The taxonomy itself
* **.Data.Terms.Alphabetical** The Terms alphabetized
* **.Data.Terms.ByCount** The Terms ordered by popularity
@@ -121,7 +122,7 @@ Another example listing the content for each term (ordered by Date):
## Ordering
-Hugo can order the meta data in two different ways. It can be ordered:
+Hugo can order the term meta data in two different ways. It can be ordered:
* by the number of contents assigned to that key, or
* alphabetically.
@@ -162,3 +163,14 @@ Hugo can order the meta data in two different ways. It can be ordered:
</section>
{{ partial "footer.html" . }}
+
+Hugo can also order and paginate the term index pages in all the normal ways.
+
+### Example terms.html snippet (paginated and ordered by date)
+
+ <h1 id="title">{{ .Title }}</h1>
+ <ul>
+ {{ range .Paginator.Pages.ByDate.Reverse }}
+ <li><a href="{{ .Permalink }}">{{ .Title }}</a> {{ $.Data.Terms.Count .Data.Term }}</li>
+ {{ end }}
+ </ul>
diff --git a/hugolib/node_as_page_test.go b/hugolib/node_as_page_test.go
index f063faf9a..57a51f40a 100644
--- a/hugolib/node_as_page_test.go
+++ b/hugolib/node_as_page_test.go
@@ -176,7 +176,10 @@ func doTestNodeAsPage(t *testing.T, ugly, preserveTaxonomyNames bool) {
"Lastmod: 2009-01-15",
)
- // There are no pages to paginate over in the taxonomy terms.
+ // Check taxonomy terms paginator
+ th.assertFileContent(expectedFilePath(ugly, "public", "categories", "page", "2"),
+ "Taxonomy Terms Title: Taxonomy Term Categories",
+ "Pag: Taxonomy Web")
// RSS
th.assertFileContent(filepath.Join("public", "customrss.xml"), "Recent content in Home Sweet Home! on Hugo Rocks", "<rss")
@@ -184,6 +187,7 @@ func doTestNodeAsPage(t *testing.T, ugly, preserveTaxonomyNames bool) {
th.assertFileContent(filepath.Join("public", "sect2", "customrss.xml"), "Recent content in Section2 on Hugo Rocks", "<rss")
th.assertFileContent(filepath.Join("public", "categories", "hugo", "customrss.xml"), "Recent content in Taxonomy Hugo on Hugo Rocks", "<rss")
th.assertFileContent(filepath.Join("public", "categories", "web", "customrss.xml"), "Recent content in Taxonomy Web on Hugo Rocks", "<rss")
+ th.assertFileContent(filepath.Join("public", "categories", "customrss.xml"), "Recent content in Taxonomy Term Categories on Hugo Rocks", "<rss")
}
@@ -792,6 +796,10 @@ Lastmod: {{ .Lastmod.Format "2006-01-02" }}
writeSource(t, fs, filepath.Join("layouts", "_default", "terms.html"), `
Taxonomy Terms Title: {{ .Title }}
Taxonomy Terms Content: {{ .Content }}
+# Pages: {{ len .Data.Pages }}
+{{ range .Paginator.Pages }}
+ Pag: {{ .Title }}
+{{ end }}
{{ range $key, $value := .Data.Terms }}
k/v: {{ $key | lower }} / {{ printf "%s" $value }}
{{ end }}
diff --git a/hugolib/page.go b/hugolib/page.go
index 8e09012e9..3169e123a 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -681,7 +681,8 @@ func (p *Page) rssLayouts() []string {
singular := p.s.taxonomiesPluralSingular[p.sections[0]]
return []string{"taxonomy/" + singular + ".rss.xml", "_default/rss.xml", "rss.xml", "_internal/_default/rss.xml"}
case KindTaxonomyTerm:
- // No RSS for taxonomy terms
+ singular := p.s.taxonomiesPluralSingular[p.sections[0]]
+ return []string{"taxonomy/" + singular + ".terms.rss.xml", "_default/rss.xml", "rss.xml", "_internal/_default/rss.xml"}
case KindPage:
// No RSS for regular pages
}
@@ -1591,6 +1592,7 @@ func (p *Page) prepareData(s *Site) error {
p.Data[singular] = taxonomy
p.Data["Singular"] = singular
p.Data["Plural"] = plural
+ p.Data["Term"] = term
pages = taxonomy.Pages()
case KindTaxonomyTerm:
plural := p.sections[0]
@@ -1602,6 +1604,13 @@ func (p *Page) prepareData(s *Site) error {
// keep the following just for legacy reasons
p.Data["OrderedIndex"] = p.Data["Terms"]
p.Data["Index"] = p.Data["Terms"]
+
+ // A list of all KindTaxonomy pages with matching plural
+ for _, p := range s.findPagesByKind(KindTaxonomy) {
+ if p.sections[0] == plural {
+ pages = append(pages, p)
+ }
+ }
}
p.Data["Pages"] = pages
diff --git a/hugolib/site.go b/hugolib/site.go
index 1512819d5..93e3ee740 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -2037,7 +2037,7 @@ func (s *Site) newHomePage() *Page {
func (s *Site) setPageURLs(p *Page, in string) {
p.URLPath.URL = s.PathSpec.URLizeAndPrep(in)
p.URLPath.Permalink = s.Info.permalink(p.URLPath.URL)
- if p.Kind != KindPage && p.Kind != KindTaxonomyTerm {
+ if p.Kind != KindPage {
p.RSSLink = template.URL(s.Info.permalink(in + ".xml"))
}
}
diff --git a/hugolib/site_render.go b/hugolib/site_render.go
index 81cad525c..37ee21fd4 100644
--- a/hugolib/site_render.go
+++ b/hugolib/site_render.go
@@ -72,7 +72,7 @@ func pageRenderer(s *Site, pages <-chan *Page, results chan<- error, wg *sync.Wa
}
// Taxonomy terms have no page set to paginate, so skip that for now.
- if p.IsNode() && p.Kind != KindTaxonomyTerm {
+ if p.IsNode() {
if err := s.renderPaginator(p); err != nil {
results <- err
}
diff --git a/hugolib/taxonomy_test.go b/hugolib/taxonomy_test.go
index 5687cc032..6843838b9 100644
--- a/hugolib/taxonomy_test.go
+++ b/hugolib/taxonomy_test.go
@@ -15,7 +15,6 @@ package hugolib
import (
"fmt"
- "html/template"
"path/filepath"
"reflect"
"testing"
@@ -127,9 +126,24 @@ others:
s := h.Sites[0]
- // Issue #1302
- term := s.getPage(KindTaxonomyTerm, "others")
- require.Equal(t, template.URL(""), term.RSSLink)
+ // Make sure that each KindTaxonomyTerm page has an appropriate number
+ // of KindTaxonomy pages in its Pages slice.
+ taxonomyTermPageCounts := map[string]int{
+ "tags": 2,
+ "categories": 2,
+ "others": 2,
+ "empties": 0,
+ }
+
+ for taxonomy, count := range taxonomyTermPageCounts {
+ term := s.getPage(KindTaxonomyTerm, taxonomy)
+ require.NotNil(t, term)
+ require.Len(t, term.Pages, count)
+
+ for _, page := range term.Pages {
+ require.Equal(t, KindTaxonomy, page.Kind)
+ }
+ }
// Issue #3070 preserveTaxonomyNames
if preserveTaxonomyNames {