diff options
-rw-r--r-- | docs/content/templates/rss.md | 8 | ||||
-rw-r--r-- | docs/content/templates/terms.md | 14 | ||||
-rw-r--r-- | hugolib/node_as_page_test.go | 10 | ||||
-rw-r--r-- | hugolib/page.go | 11 | ||||
-rw-r--r-- | hugolib/site.go | 2 | ||||
-rw-r--r-- | hugolib/site_render.go | 2 | ||||
-rw-r--r-- | hugolib/taxonomy_test.go | 22 |
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 { |