上节课内容我们实现了删除文章的操作,本节课我们继续进行相关功能开发。当我们点击标签按钮的时候,应该要显示每个标签对应了多少篇文章。
一、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 lang="en">
<head>
<meta charset="UTF-8">
<title>标签</title>
<link href="../static/css/blogsheet.css" 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}}"><span class="global-color">{{$k}}</span> 有{{$v}}篇文章</a></div>{{end}}
</div>
</div>
</body>
</html>
四、运行
重新启动项目后,在浏览器中点击标签按钮: