Add base Sitemap support

This commit is contained in:
Vincent Batoufflet
2014-05-06 12:50:23 +02:00
committed by spf13
parent 179225449c
commit f8e675d064
5 changed files with 71 additions and 1 deletions

View File

@@ -28,6 +28,7 @@ type Node struct {
Keywords []string
Params map[string]interface{}
Date time.Time
Sitemap Sitemap
UrlPath
}

View File

@@ -220,6 +220,10 @@ func (s *Site) Render() (err error) {
return
}
s.timerStep("render and write homepage")
if err = s.RenderSitemap(); err != nil {
return
}
s.timerStep("render and write Sitemap")
return
}
@@ -740,6 +744,36 @@ func (s *Site) RenderHomePage() error {
return nil
}
func (s *Site) RenderSitemap() error {
if viper.GetBool("DisableSitemap") {
return nil
}
optChanged := false
n := s.NewNode()
n.Data["Pages"] = s.Pages
// Force `UglyUrls` option to force `sitemap.xml` file name
switch s.Target.(type) {
case *target.Filesystem:
s.Target.(*target.Filesystem).UglyUrls = true
optChanged = true
}
smLayouts := []string{"sitemap.xml", "_default/sitemap.xml", "_internal/_default/sitemap.xml"}
err := s.render(n, "sitemap.xml", s.appendThemeTemplates(smLayouts)...)
if err != nil {
return err
}
if optChanged {
s.Target.(*target.Filesystem).UglyUrls = viper.GetBool("UglyUrls")
}
return nil
}
func (s *Site) Stats() {
jww.FEEDBACK.Printf("%d pages created \n", len(s.Pages))

18
hugolib/sitemap.go Normal file
View File

@@ -0,0 +1,18 @@
package hugolib
import jww "github.com/spf13/jwalterweatherman"
type Sitemap struct {
ChangeFreq string
Priority float32
}
func (s Sitemap) Validate() {
if s.Priority < 0 {
jww.WARN.Printf("Sitemap priority should be greater than 0, found: %f", s.Priority)
s.Priority = 0
} else if s.Priority > 1 {
jww.WARN.Printf("Sitemap priority should be lesser than 1, found: %f", s.Priority)
s.Priority = 1
}
}

View File

@@ -65,6 +65,17 @@ func (t *GoHtmlTemplate) EmbedTemplates() {
</channel>
</rss>`)
t.AddInternalTemplate("_default", "sitemap.xml", `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{{ range .Data.Pages }}
<url>
<loc>{{ .Permalink }}</loc>
<lastmod>{{ safeHtml ( .Date.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ with .Sitemap.ChangeFreq }}
<changefreq>{{ . }}</changefreq>{{ end }}{{ with .Sitemap.Priority }}
<priority>{{ . }}</priority>{{ end }}
</url>
{{ end }}
</urlset>`)
t.AddInternalTemplate("", "disqus.html", `{{ if .Site.DisqusShortname }}<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_shortname = '{{ .Site.DisqusShortname }}';