Add rss feed
This commit is contained in:
parent
c3529c3a8e
commit
56964ec45f
7 changed files with 58 additions and 3 deletions
BIN
img/feed.png
Normal file
BIN
img/feed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 868 B |
|
@ -62,5 +62,11 @@ func searchHandler(w http.ResponseWriter, r *http.Request, sess *Session) {
|
||||||
if page > 0 {
|
if page > 0 {
|
||||||
data.Prev = "/search/?q=" + req + "&p=" + strconv.Itoa(page-1)
|
data.Prev = "/search/?q=" + req + "&p=" + strconv.Itoa(page-1)
|
||||||
}
|
}
|
||||||
loadTemplate(w, "search", data)
|
|
||||||
|
format := r.Form["fmt"]
|
||||||
|
if (len(format) > 0) && (format[0] == "rss") {
|
||||||
|
loadTxtTemplate(w, "search_rss.xml", data)
|
||||||
|
} else {
|
||||||
|
loadTemplate(w, "search", data)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
16
template.go
16
template.go
|
@ -5,7 +5,11 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
import txt_tmpl "text/template"
|
||||||
|
|
||||||
type Status struct {
|
type Status struct {
|
||||||
|
BaseURL string
|
||||||
|
FullURL string
|
||||||
Search string
|
Search string
|
||||||
User string
|
User string
|
||||||
IsAdmin bool
|
IsAdmin bool
|
||||||
|
@ -22,6 +26,8 @@ func GetStatus(w http.ResponseWriter, r *http.Request) Status {
|
||||||
var s Status
|
var s Status
|
||||||
sess := GetSession(r)
|
sess := GetSession(r)
|
||||||
sess.Save(w, r)
|
sess.Save(w, r)
|
||||||
|
s.BaseURL = "http://" + r.Host
|
||||||
|
s.FullURL = s.BaseURL + r.RequestURI
|
||||||
s.User = sess.User
|
s.User = sess.User
|
||||||
s.IsAdmin = sess.IsAdmin()
|
s.IsAdmin = sess.IsAdmin()
|
||||||
s.Notif = sess.Notif
|
s.Notif = sess.Notif
|
||||||
|
@ -53,3 +59,13 @@ func loadTemplate(w http.ResponseWriter, tmpl string, data interface{}) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var txt_templates = txt_tmpl.Must(txt_tmpl.ParseFiles(TEMPLATE_PATH + "search_rss.xml"))
|
||||||
|
|
||||||
|
func loadTxtTemplate(w http.ResponseWriter, tmpl string, data interface{}) {
|
||||||
|
err := txt_templates.ExecuteTemplate(w, tmpl, data)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link href="/css/bootstrap-responsive.min.css" rel="stylesheet">
|
<link href="/css/bootstrap-responsive.min.css" rel="stylesheet">
|
||||||
<link href="/css/custom.css" rel="stylesheet">
|
<link href="/css/custom.css" rel="stylesheet">
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="Imperial Library of Trantor" href="/search/?fmt=rss&q={{.Search}}" />
|
||||||
<title>Imperial Library of Trantor</title>
|
<title>Imperial Library of Trantor</title>
|
||||||
<script src="/js/jquery.js"></script>
|
<script src="/js/jquery.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="span8">
|
<div class="span8">
|
||||||
<h4>Last books added:</h4>
|
<h4>Last books added: <a href="/search/?fmt=rss&q="><img src="/img/feed.png"/></a></h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="span4">
|
<div class="span4">
|
||||||
<p class="pull-right">{{.Count}} books</p>
|
<p class="pull-right">{{.Count}} books</p>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{{template "header.html" .S}}
|
{{template "header.html" .S}}
|
||||||
|
|
||||||
<p class="centered">Found {{.Found}} books. Page {{.Page}}</p>
|
<p class="centered">Found {{.Found}} books. Page {{.Page}} <a href="/search/?fmt=rss&q={{.S.Search}}"><img src="/img/feed.png"/></a></p>
|
||||||
|
|
||||||
<ul class="pager">
|
<ul class="pager">
|
||||||
{{if .Prev}}
|
{{if .Prev}}
|
||||||
|
|
32
templates/search_rss.xml
Normal file
32
templates/search_rss.xml
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<rss version="2.0">
|
||||||
|
<channel>
|
||||||
|
{{with .S}}
|
||||||
|
<title>Imperial Library of Trantor</title>
|
||||||
|
{{if .Search}}
|
||||||
|
<description>Book search: {{.Search}}</description>
|
||||||
|
{{else}}
|
||||||
|
<description>Last books added</description>
|
||||||
|
{{end}}
|
||||||
|
<link>{{.BaseURL}}</link>
|
||||||
|
{{end}}
|
||||||
|
|
||||||
|
{{$baseURL := .S.BaseURL}}
|
||||||
|
{{range .Books}}
|
||||||
|
<item>
|
||||||
|
<title>{{.Title}} - {{index .Author 0}}</title>
|
||||||
|
<description>{{.Description}}</description>
|
||||||
|
<link>{{$baseURL}}/book/{{.Id}}</link>
|
||||||
|
{{if .Isbn}}
|
||||||
|
<guid isPermaLink="false">ISBN: {{.Isbn}}</guid>
|
||||||
|
{{end}}
|
||||||
|
{{range .Subject}}
|
||||||
|
{{if .}}
|
||||||
|
<category>{{.}}</category>
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
|
</item>
|
||||||
|
{{end}}
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
</rss>
|
Reference in a new issue