github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/blogweb_gin/models/home_model.go (about)

     1  package models
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"github.com/qiuhoude/go-web/blogweb_gin/config"
     7  	"github.com/qiuhoude/go-web/blogweb_gin/utils"
     8  	"html/template"
     9  	"strconv"
    10  	"strings"
    11  )
    12  
    13  type HomeBlockParam struct {
    14  	Id         int
    15  	Title      string
    16  	Tags       []TagLink
    17  	Short      string
    18  	Content    string
    19  	Author     string
    20  	CreateTime string
    21  	//查看文章的地址
    22  	Link string
    23  
    24  	//修改文章的地址
    25  	UpdateLink string
    26  	DeleteLink string
    27  
    28  	//记录是否登录
    29  	IsLogin bool
    30  }
    31  
    32  type TagLink struct {
    33  	TagName string
    34  	TagUrl  string
    35  }
    36  
    37  type HomeFooterPageCode struct {
    38  	HasPre   bool
    39  	HasNext  bool
    40  	ShowPage string
    41  	PreLink  string
    42  	NextLink string
    43  }
    44  
    45  //----------首页显示内容---------
    46  func MakeHomeBlocks(articles []Article, isLogin bool) template.HTML {
    47  	htmlHome := ""
    48  	for _, art := range articles {
    49  		//将数据库model转换为首页模板所需要的model
    50  		homeParam := HomeBlockParam{}
    51  		homeParam.Id = art.Id
    52  		homeParam.Title = art.Title
    53  		homeParam.Tags = createTagsLinks(art.Tags)
    54  		//logs.Info.Println("tag-->", art.Tags)
    55  		homeParam.Short = art.Short
    56  		homeParam.Content = art.Content
    57  		homeParam.Author = art.Author
    58  		homeParam.CreateTime = utils.SwitchTimeStampToData(art.Createtime)
    59  		homeParam.Link = "/article/show/" + strconv.Itoa(art.Id)
    60  		homeParam.UpdateLink = "/article/update?id=" + strconv.Itoa(art.Id)
    61  		homeParam.DeleteLink = "/article/delete?id=" + strconv.Itoa(art.Id)
    62  		homeParam.IsLogin = isLogin
    63  
    64  		//处理变量
    65  		//ParseFile解析该文件,用于插入变量
    66  		t, _ := template.ParseFiles("views/home_block.html")
    67  		buffer := bytes.Buffer{}
    68  		//就是将html文件里面的比那两替换为穿进去的数据
    69  		t.Execute(&buffer, homeParam)
    70  		htmlHome += buffer.String()
    71  	}
    72  	//logs.Info.Println("htmlHome-->", htmlHome)
    73  	return template.HTML(htmlHome)
    74  }
    75  
    76  //将tags字符串转化成首页模板所需要的数据结构
    77  func createTagsLinks(tags string) []TagLink {
    78  	var tagLink []TagLink
    79  	tagsPamar := strings.Split(tags, "&")
    80  	for _, tag := range tagsPamar {
    81  		tagLink = append(tagLink, TagLink{tag, "/?tag=" + tag})
    82  	}
    83  	return tagLink
    84  }
    85  
    86  //-----------翻页-----------
    87  //page是当前的页数
    88  func ConfigHomeFooterPageCode(page int) HomeFooterPageCode {
    89  	pageCode := HomeFooterPageCode{}
    90  	//查询出总的条数
    91  	num := GetArticleRowsNum()
    92  	//从配置文件中读取每页显示的条数
    93  	//pageRow := config.NUM
    94  	//计算出总页数
    95  	allPageNum := (num-1)/config.NUM + 1
    96  
    97  	pageCode.ShowPage = fmt.Sprintf("%d/%d", page, allPageNum)
    98  
    99  	//当前页数小于等于1,那么上一页的按钮不能点击
   100  	if page <= 1 {
   101  		pageCode.HasPre = false
   102  	} else {
   103  		pageCode.HasPre = true
   104  	}
   105  
   106  	//当前页数大于等于总页数,那么下一页的按钮不能点击
   107  	if page >= allPageNum {
   108  		pageCode.HasNext = false
   109  	} else {
   110  		pageCode.HasNext = true
   111  	}
   112  
   113  	pageCode.PreLink = "/?page=" + strconv.Itoa(page-1)
   114  	pageCode.NextLink = "/?page=" + strconv.Itoa(page+1)
   115  	return pageCode
   116  
   117  }