归档搜索

1. 归档

	http.HandleFunc("/pigeonhole",views.HTML.Pigeonhole)
1
package views

import (
	"ms-go-blog/common"
	"ms-go-blog/service"
	"net/http"
)

func (*HTMLApi) Pigeonhole(w http.ResponseWriter,r *http.Request)  {
	pigeonhole := common.Template.Pigeonhole

	pigeonholeRes := service.FindPostPigeonhole()
	pigeonhole.WriteData(w,pigeonholeRes)
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package service

import (
	"ms-go-blog/config"
	"ms-go-blog/dao"
	"ms-go-blog/models"
)

func  FindPostPigeonhole() models.PigeonholeRes {
	//查询所有的文章 进行月份的整理
	//查询所有的分类
	posts,_ := dao.GetPostAll()
	pigeonholeMap := make(map[string][]models.Post)
	for _,post :=range posts{
		at := post.CreateAt
		month := at.Format("2006-01")
		pigeonholeMap[month] = append(pigeonholeMap[month],post)
	}
	categorys,_ := dao.GetAllCategory()
	return models.PigeonholeRes{
		config.Cfg.Viewer,
		config.Cfg.System,
		categorys,
		pigeonholeMap,
	}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

2. 自定义页面

package views

import (
	"errors"
	"log"
	"ms-go-blog/common"
	"ms-go-blog/service"
	"net/http"
	"strconv"
	"strings"
)

func (*HTMLApi) Index(w http.ResponseWriter,r *http.Request)  {
	index := common.Template.Index
	//页面上涉及到的所有的数据,必须有定义
	//数据库查询
	if err := r.ParseForm();err != nil{
		log.Println("表单获取失败:",err)
		index.WriteError(w,errors.New("系统错误,请联系管理员!!"))
		return
	}
	pageStr := r.Form.Get("page")
	page := 1
	if pageStr != "" {
		page,_ = strconv.Atoi(pageStr)
	}
	//每页显示的数量
	pageSize := 10
	path := r.URL.Path
	slug := strings.TrimPrefix(path,"/")
	hr,err := service.GetAllIndexInfo(slug,page,pageSize)
	if err != nil {
		log.Println("Index获取数据出错:",err)
		index.WriteError(w,errors.New("系统错误,请联系管理员!!"))
	}
	index.WriteData(w,hr)
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package service

import (
	"html/template"
	"ms-go-blog/config"
	"ms-go-blog/dao"
	"ms-go-blog/models"
)

func GetAllIndexInfo(slug string,page,pageSize int)  (*models.HomeResponse,error){
	categorys,err := dao.GetAllCategory()
	if err != nil {
		return nil, err
	}
	var posts []models.Post
	var total int
	if slug == "" {
		posts,err = dao.GetPostPage(page,pageSize)
		total = dao.CountGetAllPost()
	}else{
		posts,err = dao.GetPostPageBySlug(slug,page,pageSize)
		total = dao.CountGetAllPostBySlug(slug)
	}

	var postMores []models.PostMore
	for _,post := range posts{
		categoryName := dao.GetCategoryNameById(post.CategoryId)
		userName := dao.GetUserNameById(post.UserId)
		content := []rune(post.Content)
		if len(content) > 100 {
			content = content[0:100]
		}
		postMore := models.PostMore{
			 post.Pid,
			 post.Title,
			 post.Slug,
			 template.HTML(content),
			 post.CategoryId,
			 categoryName,
			 post.UserId,
			 userName,
			 post.ViewCount,
			 post.Type,
			 models.DateDay(post.CreateAt),
			 models.DateDay(post.UpdateAt),
		 }
		 postMores = append(postMores,postMore)
	}
	//11  10 2  10 1 9 1  21 3
	//  (11-1)/10 + 1 = 2

	pagesCount := (total-1)/10 + 1
	var pages []int
	for i := 0;i<pagesCount;i++ {
		pages = append(pages,i+1)
	}
	var hr = &models.HomeResponse{
		config.Cfg.Viewer,
		categorys,
		postMores,
		total,
		page,
		pages,
		page != pagesCount,
	}
	return hr,nil
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
func GetPostPageBySlug(slug string,page,pageSize int) ([]models.Post,error) {
	page = (page-1) * pageSize
	rows, err := DB.Query("select * from blog_post where slug = ? limit ?,?",slug,page,pageSize)
	if err != nil {
		return nil,err
	}
	var posts []models.Post
	for rows.Next() {
		var post models.Post
		err := rows.Scan(
			&post.Pid,
			&post.Title,
			&post.Content,
			&post.Markdown,
			&post.CategoryId,
			&post.UserId,
			&post.ViewCount,
			&post.Type,
			&post.Slug,
			&post.CreateAt,
			&post.UpdateAt,
		)
		if err != nil {
			return nil, err
		}
		posts = append(posts,post)
	}
	return posts,nil
}
func  CountGetAllPostBySlug(slug string) (count int)  {
	rows := DB.QueryRow("select count(1) from blog_post where slug=?",slug)
	_ = rows.Scan(&count)
	return
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

3. 搜索

func GetPostSearch(condition string) ([]models.Post,error)  {
	rows, err := DB.Query("select * from blog_post where title like ?","%"+condition+"%")
	if err != nil {
		return nil,err
	}
	var posts []models.Post
	for rows.Next() {
		var post models.Post
		err := rows.Scan(
			&post.Pid,
			&post.Title,
			&post.Content,
			&post.Markdown,
			&post.CategoryId,
			&post.UserId,
			&post.ViewCount,
			&post.Type,
			&post.Slug,
			&post.CreateAt,
			&post.UpdateAt,
		)
		if err != nil {
			return nil, err
		}
		posts = append(posts,post)
	}
	return posts,nil
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
	http.HandleFunc("/api/v1/post/search",api.API.SearchPost)
1
func (*Api) SearchPost(w http.ResponseWriter,r *http.Request)  {
	_ = r.ParseForm()
	condition := r.Form.Get("val")
	searchResp := service.SearchPost(condition)
	common.Success(w,searchResp)
}
1
2
3
4
5
6
func SearchPost(condition string) []models.SearchResp  {
	posts,_ := dao.GetPostSearch(condition)
	var searchResps []models.SearchResp
	for _,post := range posts{
		searchResps = append(searchResps,models.SearchResp{
			post.Pid,
			post.Title,
		})
	}
	return searchResps
}
1
2
3
4
5
6
7
8
9
10
11