Add collection handlers, routes, feeds, sitemaps
This commit is contained in:
94
sitemap.go
Normal file
94
sitemap.go
Normal file
@@ -0,0 +1,94 @@
|
||||
package writefreely
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/ikeikeikeike/go-sitemap-generator/stm"
|
||||
"github.com/writeas/web-core/log"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
func buildSitemap(host, alias string) *stm.Sitemap {
|
||||
sm := stm.NewSitemap()
|
||||
sm.SetDefaultHost(host)
|
||||
if alias != "/" {
|
||||
sm.SetSitemapsPath(alias)
|
||||
}
|
||||
|
||||
sm.Create()
|
||||
|
||||
// Note: Do not call `sm.Finalize()` because it flushes
|
||||
// the underlying datastructure from memory to disk.
|
||||
|
||||
return sm
|
||||
}
|
||||
|
||||
func handleViewSitemap(app *app, w http.ResponseWriter, r *http.Request) error {
|
||||
vars := mux.Vars(r)
|
||||
|
||||
// Determine canonical blog URL
|
||||
alias := vars["collection"]
|
||||
subdomain := vars["subdomain"]
|
||||
isSubdomain := subdomain != ""
|
||||
if isSubdomain {
|
||||
alias = subdomain
|
||||
}
|
||||
|
||||
host := fmt.Sprintf("%s/%s/", app.cfg.App.Host, alias)
|
||||
var c *Collection
|
||||
var err error
|
||||
pre := "/"
|
||||
if app.cfg.App.SingleUser {
|
||||
c, err = app.db.GetCollectionByID(1)
|
||||
} else {
|
||||
c, err = app.db.GetCollection(alias)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !isSubdomain {
|
||||
pre += alias + "/"
|
||||
}
|
||||
host = c.CanonicalURL()
|
||||
|
||||
sm := buildSitemap(host, pre)
|
||||
posts, err := app.db.GetPosts(c, 0, false)
|
||||
if err != nil {
|
||||
log.Error("Error getting posts: %v", err)
|
||||
return err
|
||||
}
|
||||
lastSiteMod := time.Now()
|
||||
for i, p := range *posts {
|
||||
if i == 0 {
|
||||
lastSiteMod = p.Updated
|
||||
}
|
||||
u := stm.URL{
|
||||
"loc": p.Slug.String,
|
||||
"changefreq": "weekly",
|
||||
"mobile": true,
|
||||
"lastmod": p.Updated,
|
||||
}
|
||||
if len(p.Images) > 0 {
|
||||
imgs := []stm.URL{}
|
||||
for _, i := range p.Images {
|
||||
imgs = append(imgs, stm.URL{"loc": i, "title": ""})
|
||||
}
|
||||
u["image"] = imgs
|
||||
}
|
||||
sm.Add(u)
|
||||
}
|
||||
|
||||
// Add top URL
|
||||
sm.Add(stm.URL{
|
||||
"loc": pre,
|
||||
"changefreq": "daily",
|
||||
"priority": "1.0",
|
||||
"lastmod": lastSiteMod,
|
||||
})
|
||||
|
||||
w.Write(sm.XMLContent())
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user