diff --git a/app/handler/func.go b/app/handler/func.go index cfcaadf..75f6d49 100644 --- a/app/handler/func.go +++ b/app/handler/func.go @@ -80,5 +80,6 @@ func SidebarHtml(context *GoInk.Context) string { return Theme(context).Tpl("sidebar", map[string]interface{}{ "Popular": model.GetPopularArticleList(4), "RecentComment": model.GetCommentRecentList(3), + "Tags":model.GetContentTags(), }) } diff --git a/app/model/content.go b/app/model/content.go index 639b347..5d74bcf 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "github.com/fuxiaohei/GoBlog/app/utils" + "net/url" "os" "path/filepath" "sort" @@ -15,6 +16,7 @@ var ( contents map[int]*Content contentMaxId int contentsIndex map[string][]int + tags []*Tag ) // Content instance, defines content data items. @@ -56,6 +58,15 @@ func (cnt *Content) TagString() string { return strings.Join(cnt.Tags, ",") } +// GetTags returns tags struct in this content. +func (cnt *Content) GetTags() []*Tag { + tgs := make([]*Tag, len(cnt.Tags)) + for i, t := range cnt.Tags { + tgs[i] = &Tag{Name: t} + } + return tgs +} + // Link returns content link as {type}/{id}/{slug}.html. // If content isn't published, return "#". // If content is page and top linked, return {slug}.html as top level link. @@ -122,6 +133,17 @@ func (cnt *Content) User() *User { return GetUserById(cnt.AuthorId) } +// Content Tag struct. It convert tag string to proper struct or link. +type Tag struct { + Name string + Cid []int +} + +// Link returns tag name url-encoded link. +func (t *Tag) Link() string { + return "/tag/" + url.QueryEscape(t.Name) +} + // GetContentById gets a content by given id. func GetContentById(id int) *Content { return contents[id] @@ -332,16 +354,26 @@ func generateContentTmpIndexes() { // assemble indexes map data["pop-index"] = popIndex + tags = make([]*Tag, 0) for tag, index := range tagIndexes { sort.Sort(sort.Reverse(sort.IntSlice(index))) data["t-"+tag] = index contentsIndex["t-"+tag] = index + t := new(Tag) + t.Name = tag + t.Cid = index + tags = append(tags, t) } // write to tmp data TmpStorage.Set("contents", data) } +// GetContentTags returns all tags. +func GetContentTags() []*Tag { + return tags +} + // GetPopularArticleList returns popular articles list. // Popular articles are ordered by comment number. func GetPopularArticleList(size int) []*Content { diff --git a/view/saber/article.html b/view/saber/article.html index 2e5f9a6..f04ae73 100644 --- a/view/saber/article.html +++ b/view/saber/article.html @@ -8,7 +8,7 @@

{{.Title}}

{{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}}

{{Html .Content}}

- 标签:{{.TagString}} + 标签:{{range .GetTags}}{{.Name}}{{end}}

{{end}} diff --git a/view/saber/index.html b/view/saber/index.html index 5b4abba..96f69e0 100644 --- a/view/saber/index.html +++ b/view/saber/index.html @@ -9,7 +9,7 @@

{{.Title}}

{{Html .Summary}}

{{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}} - 标签:{{.TagString}} + 标签:{{range .GetTags}}{{.Name}}{{end}} 继续阅读

diff --git a/view/saber/sidebar.html b/view/saber/sidebar.html index 2e0bc2a..7325a89 100644 --- a/view/saber/sidebar.html +++ b/view/saber/sidebar.html @@ -17,4 +17,12 @@
最新评论
{{end}} + \ No newline at end of file