侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

go+beego框架开发博客首页功能流程步骤

Go  /  管理员 发布于 2年前   544

上一篇自定义函数也是铺垫开发首页的知识点,像首尾分离,分页等,后续首页功能开发的必须知识点会在这文中写出来


1.首先 路由 首页不用说默认是/ 根目录

  在routers目录router.go文件中添加

//首页
beego.Router("/", &controllers.IndexController{})

2.添加首页控制器

  在controllers目录下创建index.go文件 

  都是orm操作,首页我就没写model了,主要是方便,还有一个分页

2.1 分页 (这个单独写一下,其他的我就粘贴全部首页控制器代码了)

  在models目录下创建pages.go文件 专门处理分页页数值

package models
import (
"math"
_ "github.com/go-sql-driver/mysql"
)
//分页方法,根据传递过来的页数,每页数,总数,返回分页的内容 7个页数 前 1,2,3,4,5 后 的格式返回,小于5页返回具体页数
func Paginator(page, prepage int, nums int) map[string]interface{} {
var firstpage int //前一页地址
var lastpage int  //后一页地址
//根据nums总数,和prepage每页数量 生成分页总数
totalpages := int(math.Ceil(float64(nums) / float64(prepage))) //page总数
if page > totalpages {
page = totalpages
}
if page = totalpages-5 && totalpages > 5: //最后5页
start := totalpages - 5 + 1
firstpage = page - 1
lastpage = int(math.Min(float64(totalpages), float64(page+1)))
pages = make([]int, 5)
for i, _ := range pages {
pages[i] = start + i
}
case page >= 3 && totalpages > 5:
start := page - 3 + 1
pages = make([]int, 5)
firstpage = page - 3
for i, _ := range pages {
pages[i] = start + i
}
firstpage = page - 1
lastpage = page + 1
default:
pages = make([]int, int(math.Min(5, float64(totalpages))))
for i, _ := range pages {
pages[i] = i + 1
}
firstpage = int(math.Max(float64(1), float64(page-1)))
lastpage = page + 1
}
paginatorMap := make(map[string]interface{})
paginatorMap["pages"] = pages
paginatorMap["totalpages"] = totalpages
paginatorMap["firstpage"] = firstpage
paginatorMap["lastpage"] = lastpage
paginatorMap["currpage"] = page
return paginatorMap
}

2.2 首页控制器全部代码

package controllers
import (
"fmt"
"gblog/models"
"strconv"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
type IndexController struct {
beego.Controller
}
func (c *IndexController) Get() {
c.Data["title"] = "Go编程_beego_常用PHP框架_前端后端分享交流-侯体宗的博客"
c.Data["keywords"] = "Go编程_beego_常用PHP框架_前端后端分享交流"
c.Data["description"] = "个人博客,侯体宗的博客,Go编程,beego框架,侯体宗的博客常用框架及前端后端分享交流"
o := orm.NewOrm()
//分类列表
var cats []orm.Params
catssql := `select cat.cat_id,cat.catname,count(art.cat_id) as num from cat inner join art on art.cat_id = cat.cat_id group by art.cat_id`
o.Raw(catssql).Values(&cats)
c.Data["cats"] = cats
//当前页码
page, err := c.GetInt("page")
if err != nil {
page = 1
println(err)
}
//文章总条数
var count []orm.Params
numssql := `select count(*) as count from art where is_state=0 and is_del=1 order by art_id desc`
o.Raw(numssql).Values(&count)
nums := count[0]["count"]
// 这里先显示转换,.(string) 把interface转换成string类型,再利用strconv.Atoi把string 转换成int
cnt, _ := strconv.Atoi(nums.(string))
//当前页 每页条数 总条数
var pageSize int
pageSize = 30
pages := models.Paginator(page, pageSize, cnt)
c.Data["pages"] = pages
//文章列表 分页数据
var arts []orm.Params
artssql := `select art_id,title,content,pubtime,view,cat_id from art where is_state=0 and is_del=1 order by art_id desc limit ?,?`
o.Raw(artssql, (page-1)*pageSize, pageSize).Values(&arts)
c.Data["arts"] = arts
//文章归档 格式:2017年01月
var artdates []orm.Params
artdatessql := `select pubtime,FROM_UNIXTIME( pubtime,'%Y-%m') as time ,count(*) as num FROM art where  is_state=0 and is_del=1 group by time`
o.Raw(artdatessql).Values(&artdates)
c.Data["artdates"] = artdates
//标签云
var tags []orm.Params
tagssql := `select tag_id,tagname FROM tag group by tagname order by tag_id desc limit 50`
o.Raw(tagssql).Values(&tags)
c.Data["tags"] = tags
fmt.Printf("%v", pages)
//c.Data["json"] = tags
//c.ServeJSON()
c.TplName = "index.html"
}

3.view  这包括首尾分离模板页面 官网介绍两种方式 一种是layout 还有就是下面这种

3.1 首尾分离模板页面 在views目录下创建pubcli目录 并在底下创建header/footer.html文件

{{template "public/header.html" .}}
中间内容 不要问为什么用这种 一个字熟 两个字习惯
{{template "public/footer.html" .}}

3.2 中间html 就是控制器渲染的 c.TplName = "index.html"

在views目录下创建index.html文件 全部代码我就不贴了,只贴分页列表段代码

{{template "public/header.html" .}}

<div class="row clearfix">
   <div class="col-md-8 column">
       <ul class="nav nav-tabs">
           <li class="active"><a href="/">最新</a></li>
           <li class=""><a href="?q=hot">最热</a></li>
           <li class="disabled"><a href="#">问答</a></li>
           <li class="dropdown pull-right">
               <a href="#" data-toggle="dropdown" class="dropdown-toggle">下拉<strong class="caret"></strong></a>
               <ul class="dropdown-menu">
                   <li><a href="#">操作</a></li>
                   <li><a href="#">设置栏目</a></li>
                   <li><a href="#">更多设置</a></li>
                   <li class="divider"></li>
                   <li><a href="#">分割线</a></li>
               </ul>
           </li>
       </ul>
       <div class="list-group">
           {{range $ind, $elem := .arts}}
           <a href="/art/390" class="list-group-item"><span style="float:right;color:#999;"><i class="icon ion-eye"></i> {{$elem.view}} | <small>{{FormatDate $elem.pubtime}}</small></span>{{$elem.title}}</a>
           {{end}}
       </div>
       <ul class="pagination">
           <li><a href="?page={{.pages.firstpage}}" class="btn btn-large"> 上一页 </a></li>
           <li><a href="">{{.pages.currpage}}</a></li>
           <li><a href="?page={{.pages.lastpage}}"> 下一页 </a></li>
           <li><a href="?page={{.pages.totalpages}}"> 尾页 </a></li>
       </ul>
   </div>
   <div class="col-md-4 column">
   <p class="h-block">
   <strong>该博客于2020-9-28日,后端基于laravel8框架开发<br>前端页面使用Bootstrap可视化布局系统自动生成</strong><br>
   <small>是我仿的原来我的TP5框架写的博客,比较粗糙,底下是入口</small><br>
   <a href="https://www.zongscan.com/">侯体宗的博客</a>
</p>


{{template "public/footer.html" .}}


首页基本展示完,效果就不贴图了,就是本网站的首页布局基本一样

后续就写登录功能的session/cookie的持久化



  • 上一条:
    go+beego自定义公共函数编写及实现根据时间戳计算与当前时间的间距及格式化单位
    下一条:
    go+beego框架开发博客,该博文就告一段落
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在go语言中对浮点的数组、切片(slice)进行正向排序和反向排序(0个评论)
    • 在go语言中对整数数组、切片(slice)进行排序和反向排序(0个评论)
    • 在go语言中对字符串数组、切片(slice)进行排序和反向排序(0个评论)
    • 在go语言中使用GoRoutines实现高性能并发批量调用api示例(0个评论)
    • Docker撤回受争议的收费方案,又可以继续使用docker了(0个评论)
    • 近期文章
    • 如何优雅处理async await错误推荐:await-to-js库(0个评论)
    • lodash工具库(0个评论)
    • 在Laravel项目中使用中间件方式统计用户在线时长功能代码示例(0个评论)
    • 在Laravel中构建业务流程模型(0个评论)
    • windows系统中安装FFMpeg及在phpstudy环境php7.3 + php-ffmpeg扩展的使用流程步骤(0个评论)
    • 在go语言中对浮点的数组、切片(slice)进行正向排序和反向排序(0个评论)
    • 在go语言中对整数数组、切片(slice)进行排序和反向排序(0个评论)
    • 在go语言中对字符串数组、切片(slice)进行排序和反向排序(0个评论)
    • 最新国内免注册ChatGPT体验站_ChatGPT镜像站访问链接地址2023/3/28持续更新(0个评论)
    • 在Laravel项目中的实现无密码认证之:发送邮箱链接授权(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客