上節課内容我們實作了删除文章的操作,本節課我們繼續進行相關功能開發。當我們點選标簽按鈕的時候,應該要顯示每個标簽對應了多少篇文章。
一、Model
當點選标簽的時候,需要查詢出資料庫中所有的标簽,然後再統計出每個标簽的文章總量,顯示到前端頁面上。
是以我們應該先查詢出資料庫中所有的标簽。
在article_model.go檔案中,加入以下代碼,先查詢出所有的标簽。
//查詢标簽,傳回一個字段的清單
func QueryArticleWithParam(param string) []string {
rows, err := utils.QueryDB(fmt.Sprintf("select %s from article", param))
if err != nil {
log.Println(err)
}
var paramList []string
for rows.Next() {
arg := ""
rows.Scan(&arg)
paramList = append(paramList, arg)
}
return paramList
}
然後再models目錄下,建立一個新的model檔案:tags_model.go
package models
import "strings"
func HandleTagsListData(tags []string) map[string]int {
var tagsMap = make(map[string]int)
for _, tag := range tags {
tagList := strings.Split(tag, "&")
for _, value := range tagList {
tagsMap[value]++
}
}
return tagsMap
}
二、Controller
接下來,我們在controllers目錄下建立一個controller的go檔案,tags_controller.go。
package controllers
import (
"myblogweb/models"
"fmt"
)
type TagsController struct {
BaseController
}
func (this *TagsController) Get() {
tags := models.QueryArticleWithParam("tags")
fmt.Println(models.HandleTagsListData(tags))
this.Data["Tags"] = models.HandleTagsListData(tags)
this.TplName = "tags.html"
}
并且在router.go中注冊新的路由:
//标簽
beego.Router("/tags", &controllers.TagsController{})
三、Views
最後我們去寫前端頁面,來接收資料。
在views包下,建立一個html檔案,tags.html:
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>标簽</title>
<link href="../static/css/blogsheet.css" target="_blank" rel="external nofollow" rel="stylesheet">
</head>
<body>
{{template "block/nav.html" .}}
<div id="main">
<h1>标簽</h1>
<div id="tags-list">
{{range $k,$v := .Tags}}
<div><a href="/?tag={{$k}}" target="_blank" rel="external nofollow" ><span class="global-color">{{$k}}</span> 有{{$v}}篇文章</a></div>{{end}}
</div>
</div>
</body>
</html>
四、運作
重新啟動項目後,在浏覽器中點選标簽按鈕: