mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Add Sitemaps config values handling
This commit is contained in:
parent
f8e675d064
commit
2a902bbca6
5 changed files with 49 additions and 13 deletions
|
@ -109,6 +109,7 @@ func InitializeConfig() {
|
||||||
viper.SetDefault("CanonifyUrls", false)
|
viper.SetDefault("CanonifyUrls", false)
|
||||||
viper.SetDefault("Indexes", map[string]string{"tag": "tags", "category": "categories"})
|
viper.SetDefault("Indexes", map[string]string{"tag": "tags", "category": "categories"})
|
||||||
viper.SetDefault("Permalinks", make(hugolib.PermalinkOverrides, 0))
|
viper.SetDefault("Permalinks", make(hugolib.PermalinkOverrides, 0))
|
||||||
|
viper.SetDefault("Sitemap", hugolib.Sitemap{"", -1})
|
||||||
|
|
||||||
if hugoCmdV.PersistentFlags().Lookup("build-drafts").Changed {
|
if hugoCmdV.PersistentFlags().Lookup("build-drafts").Changed {
|
||||||
viper.Set("BuildDrafts", Draft)
|
viper.Set("BuildDrafts", Draft)
|
||||||
|
|
|
@ -141,7 +141,7 @@ func renderBytes(content []byte, pagefmt string) []byte {
|
||||||
func newPage(filename string) *Page {
|
func newPage(filename string) *Page {
|
||||||
page := Page{contentType: "",
|
page := Page{contentType: "",
|
||||||
File: File{FileName: filename, Extension: "html"},
|
File: File{FileName: filename, Extension: "html"},
|
||||||
Node: Node{Keywords: []string{}},
|
Node: Node{Keywords: []string{}, Sitemap: Sitemap{Priority: -1}},
|
||||||
Params: make(map[string]interface{})}
|
Params: make(map[string]interface{})}
|
||||||
|
|
||||||
jww.DEBUG.Println("Reading from", page.File.FileName)
|
jww.DEBUG.Println("Reading from", page.File.FileName)
|
||||||
|
@ -342,6 +342,8 @@ func (page *Page) update(f interface{}) error {
|
||||||
}
|
}
|
||||||
case "status":
|
case "status":
|
||||||
page.Status = cast.ToString(v)
|
page.Status = cast.ToString(v)
|
||||||
|
case "sitemap":
|
||||||
|
page.Sitemap = parseSitemap(cast.ToStringMap(v))
|
||||||
default:
|
default:
|
||||||
// If not one of the explicit values, store in Params
|
// If not one of the explicit values, store in Params
|
||||||
switch vv := v.(type) {
|
switch vv := v.(type) {
|
||||||
|
|
|
@ -749,10 +749,33 @@ func (s *Site) RenderSitemap() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sitemapDefault := parseSitemap(viper.GetStringMap("Sitemap"))
|
||||||
|
|
||||||
optChanged := false
|
optChanged := false
|
||||||
|
|
||||||
n := s.NewNode()
|
n := s.NewNode()
|
||||||
n.Data["Pages"] = s.Pages
|
|
||||||
|
// Prepend homepage to the list of pages
|
||||||
|
pages := make(Pages, 0)
|
||||||
|
|
||||||
|
page := &Page{}
|
||||||
|
page.Site = s.Info
|
||||||
|
page.Url = "/"
|
||||||
|
|
||||||
|
pages = append(pages, page)
|
||||||
|
pages = append(pages, s.Pages...)
|
||||||
|
|
||||||
|
n.Data["Pages"] = pages
|
||||||
|
|
||||||
|
for _, page := range pages {
|
||||||
|
if page.Sitemap.ChangeFreq == "" {
|
||||||
|
page.Sitemap.ChangeFreq = sitemapDefault.ChangeFreq
|
||||||
|
}
|
||||||
|
|
||||||
|
if page.Sitemap.Priority == -1 {
|
||||||
|
page.Sitemap.Priority = sitemapDefault.Priority
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Force `UglyUrls` option to force `sitemap.xml` file name
|
// Force `UglyUrls` option to force `sitemap.xml` file name
|
||||||
switch s.Target.(type) {
|
switch s.Target.(type) {
|
||||||
|
|
|
@ -1,18 +1,28 @@
|
||||||
package hugolib
|
package hugolib
|
||||||
|
|
||||||
import jww "github.com/spf13/jwalterweatherman"
|
import (
|
||||||
|
"github.com/spf13/cast"
|
||||||
|
jww "github.com/spf13/jwalterweatherman"
|
||||||
|
)
|
||||||
|
|
||||||
type Sitemap struct {
|
type Sitemap struct {
|
||||||
ChangeFreq string
|
ChangeFreq string
|
||||||
Priority float32
|
Priority float64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Sitemap) Validate() {
|
func parseSitemap(input map[string]interface{}) Sitemap {
|
||||||
if s.Priority < 0 {
|
sitemap := Sitemap{Priority: -1}
|
||||||
jww.WARN.Printf("Sitemap priority should be greater than 0, found: %f", s.Priority)
|
|
||||||
s.Priority = 0
|
for key, value := range input {
|
||||||
} else if s.Priority > 1 {
|
switch key {
|
||||||
jww.WARN.Printf("Sitemap priority should be lesser than 1, found: %f", s.Priority)
|
case "changefreq":
|
||||||
s.Priority = 1
|
sitemap.ChangeFreq = cast.ToString(value)
|
||||||
|
case "priority":
|
||||||
|
sitemap.Priority = cast.ToFloat64(value)
|
||||||
|
default:
|
||||||
|
jww.WARN.Printf("Unknown Sitemap field: %s\n", key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return sitemap
|
||||||
|
}
|
||||||
|
|
|
@ -70,8 +70,8 @@ func (t *GoHtmlTemplate) EmbedTemplates() {
|
||||||
<url>
|
<url>
|
||||||
<loc>{{ .Permalink }}</loc>
|
<loc>{{ .Permalink }}</loc>
|
||||||
<lastmod>{{ safeHtml ( .Date.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ with .Sitemap.ChangeFreq }}
|
<lastmod>{{ safeHtml ( .Date.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ with .Sitemap.ChangeFreq }}
|
||||||
<changefreq>{{ . }}</changefreq>{{ end }}{{ with .Sitemap.Priority }}
|
<changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
|
||||||
<priority>{{ . }}</priority>{{ end }}
|
<priority>{{ .Sitemap.Priority }}</priority>{{ end }}
|
||||||
</url>
|
</url>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</urlset>`)
|
</urlset>`)
|
||||||
|
|
Loading…
Reference in a new issue