From b70ddd81ab8b08bd9f0e29653976c6ab43f02abf Mon Sep 17 00:00:00 2001 From: Las Zenow Date: Mon, 30 Jul 2012 23:59:55 +0200 Subject: [PATCH] 10 items per page on search --- search.go | 35 ++++++++++++++++++++++++++++++++++- search.html | 6 ++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/search.go b/search.go index 0453c1c..d983bbe 100644 --- a/search.go +++ b/search.go @@ -1,12 +1,17 @@ package main import ( + "strconv" "labix.org/v2/mgo" "labix.org/v2/mgo/bson" "net/http" "strings" ) +const ( + ITEMS_PAGE = 10 +) + func buildQuery(q string) bson.M { words := strings.Split(q, " ") reg := make([]bson.RegEx, len(words)) @@ -19,7 +24,11 @@ func buildQuery(q string) bson.M { type searchData struct { Search string + Found int Books []Book + Page int + Next string + Prev string } func searchHandler(coll *mgo.Collection, w http.ResponseWriter, r *http.Request) { @@ -31,5 +40,29 @@ func searchHandler(coll *mgo.Collection, w http.ResponseWriter, r *http.Request) req := strings.Join(r.Form["q"], " ") var res []Book coll.Find(buildQuery(req)).All(&res) - loadTemplate(w, "search", searchData{req, res}) + + page := 0 + if len(r.Form["p"]) != 0 { + page, err = strconv.Atoi(r.Form["p"][0]) + if err != nil || len(res) < ITEMS_PAGE*page { + page = 0 + } + } + + var data searchData + data.Search = req + data.Found = len(res) + if len(res) > ITEMS_PAGE*(page+1) { + data.Books = res[ITEMS_PAGE*page:ITEMS_PAGE*(page+1)] + } else { + data.Books = res[ITEMS_PAGE*page:] + } + data.Page = page+1 + if len(res) > (page+1)*ITEMS_PAGE { + data.Next = "/search/?q=" + req + "&p=" + strconv.Itoa(page+1) + } + if page > 0 { + data.Prev = "/search/?q=" + req + "&p=" + strconv.Itoa(page-1) + } + loadTemplate(w, "search", data) } diff --git a/search.html b/search.html index 60c4c89..bc2631f 100644 --- a/search.html +++ b/search.html @@ -4,6 +4,8 @@ +

Found {{.Found}} books. Page {{.Page}}

+ + +

+{{if .Prev}}<Prev {{end}} +{{if .Next}}Next>{{end}}