Goweb开发之Beego框架实战:第十四节 首页功能扩展

我们最初只是让首页显示第一页的文章数据,如果在访问首页的时候,后面传入相应的参数,那么我们应该根据参数显示对应的内容。

如果浏览器输入首页网址:http://127.0.0.1:8080/,那么我们显示第一页的文章数据

如果浏览器输入网址是:http://127.0.0.1:8080/?page=3,那么我们直接显示第三页的文章数据

如果浏览器输入网址是:http://127.0.0.1:8080/?tag=go,那么我们应该显示所有标签为go的文章,同理如果tag=web,我们应该显示所有标签为web的文章。

接下来我们就去改进首页的功能。

一、Controller

我们首先修改home_controller.go文件中的处理,修改代码如下:

package controllers
​
import (
    "fmt"
    "myblogweb/models"
)
​
type HomeController struct {
    //beego.Controller
    BaseController
}
​
func (this *HomeController) Get() {
​
    tag := this.GetString("tag")
    fmt.Println("tag:", tag)
    page, _ := this.GetInt("page")
    var artList []models.Article
​
    if len(tag) > 0 {
        //按照指定的标签搜索
        artList, _ = models.QueryArticlesWithTag(tag)
        this.Data["HasFooter"] = false
​
    } else {
        if page <= 0 {
            page = 1
        }
        artList, _ = models.FindArticleWithPage(page)
        this.Data["PageCode"] = models.ConfigHomeFooterPageCode(page)
        this.Data["HasFooter"] = true
    }
​
    fmt.Println("IsLogin:", this.IsLogin, this.Loginuser)
    this.Data["Content"] = models.MakeHomeBlocks(artList, this.IsLogin)
​
    this.TplName = "home.html"
}
​

我们先接收tag的值和page的值:

那么有三种情况:

  1. 如果tag有值,page就不会有值。比如:http://127.0.0.1:8080/?pag=web
  2. 如果page有值,那么tag就不会有值。比如:http://127.0.0.1:8080/?page=3
  3. 就是用户直接访问首页,没有传入tag也没有传入page:http://127.0.0.1:8080

如果是第一种情况,那么我们应该按照tag进行搜索。如果是第二种情况就按照页数查询。如果是第三种就默认按照分页查询,只是查询第一页。

二、model

接下来我们去实现按照tag进行查询,这里有个复杂的地方,就是我们在写文章的手,标签可能有一个,也肯能有多个,如果是多个,我们是按照&连接的,比如:go&socket。那么在按照标签查询的时候,就要分为4种情况:

通过标签查询首页的数据
有四种情况
   1.左右两边有&符和其他符号
   2.左边有&符号和其他符号,同时右边没有任何符号
   3.右边有&符号和其他符号,同时左边没有任何符号
   4.左右两边都没有符号
​
通过%去匹配任意多个字符,至少是一个

我们在article_model.go文件中,添加一个方法:

//--------------按照标签查询--------------
func QueryArticlesWithTag(tag string) ([]Article, error) {
​
    sql := " where tags like '%&" + tag + "&%'"
    sql += " or tags like '%&" + tag + "'"
    sql += " or tags like '" + tag + "&%'"
    sql += " or tags like '" + tag + "'"
    fmt.Println(sql)
    return QueryArticlesWithCon(sql)
}

三、运行

前端页面不用修改,我们打开浏览器输入以下网址:http://127.0.0.1:8080?tag=web

 

可以看到查询出web标签的三篇文章,重新输入网址:http://127.0.0.1:8080?tag=http

 

socket标签下的两篇文章也被查询出来了,下面我们输入以下页码:http://127.0.0.1:8080?page=3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值