beego開發(fā)輕博客——第六講 首頁文章列表和文章查詢

【小雞創(chuàng)作】beego開發(fā)輕博客

本章目標(biāo):添加“首頁文章列表”和“文章查詢”功能
github: 打開后轮傍,點(diǎn)擊右上角star按鈕
視頻教程: B站地址

文章列表功能

1. 功能分析

首頁的路由對(duì)應(yīng)的控制器邏輯是在controllers->index.go中的Get方法里面崇呵,我們需要抓到文章的數(shù)據(jù)就必須將查數(shù)據(jù)庫的邏輯放到controllers->index.go中的Get方法里面。
首頁文章列表功能,有分頁邏輯姐霍。查文章數(shù)據(jù)的時(shí)候,我們得知道查的是第幾頁的數(shù)據(jù),需要得到多少行數(shù)據(jù)珊泳。因此我們?cè)O(shè)定:頁面?zhèn)鲄ⅰ皃age”代表第幾頁,我們默認(rèn)每頁顯示10行數(shù)據(jù)拷沸。同時(shí)色查,頁面需要拿到當(dāng)前頁、總頁數(shù)來控制“上一頁”和“下一頁”撞芍。為了得到總頁數(shù)秧了,我們還需要知道文章的總數(shù)量,再與每頁顯示數(shù)據(jù)做運(yùn)算得到總頁數(shù)序无。

2.數(shù)據(jù)庫邏輯調(diào)整

2.1 添加數(shù)據(jù)庫查詢文章的功能

修改models->note.go文件 添加 更具當(dāng)前頁數(shù)和每頁顯示的行數(shù)得到文章數(shù)據(jù)的方法验毡,代碼如下:

func QueryNotesByPage(page,limit int) (note []*Note,err error) {
    //Offset從第幾行開始,Limit:返回多少數(shù)據(jù)帝嗡。
    return note,db.Offset((page-1)*limit).Limit(limit).Find(&note).Error
}
2.2 添加數(shù)據(jù)庫查詢文章的總數(shù)量的功能,代碼如下:
func QueryNotesCount()(count int,err error)  {
    return count,db.Model(&Note{}).Count(&count).Error
}

3. 控制器邏輯調(diào)整

3.1修改 controllers->index.go中的Get方法晶通,代碼如下(請(qǐng)留意代碼中的注解,都是邏輯說明):
// @router / [get]
func (this *IndexController) Get() {
    //每頁顯示10條數(shù)據(jù)
    limit := 10
    // 得到頁面?zhèn)鬟^來的參數(shù)哟玷,沒有就默認(rèn)為1
    page, err := this.GetInt("page", 1)
    if err != nil || page <= 0 {
        page = 1
    }
    //根據(jù) 當(dāng)前頁 和 每頁顯示的行數(shù) 得到文章列表數(shù)據(jù)集
    notes, err := models.QueryNotesByPage(page, limit)
    if err != nil {
        this.Abort500(err)
    }
    //將數(shù)據(jù)傳到模版頁面index.html狮辽,等待渲染
    this.Data["notes"] = notes
    //得到文章的總行數(shù)
    count, err := models.QueryNotesCount()
    if err != nil {
        this.Abort500(err)
    }
    //這兒計(jì)算總頁數(shù),如果“文章的總數(shù)量”不是“每頁顯示的行數(shù)”的倍數(shù)巢寡,就要多顯示一頁
    totpage := count / limit
    if count%limit != 0 {
        //取余數(shù)喉脖,不為0。那就要多加一頁顯示這些數(shù)據(jù)
        totpage = totpage + 1
    }
    // 將總頁數(shù) 當(dāng)前頁 傳到模版頁面讼渊。等待渲染
    this.Data["totpage"] = totpage
    this.Data["page"] = page
    this.TplName = "index.html"
}

4. 前臺(tái)頁面調(diào)整

4.1. 修改views->index.html頁面动看,我們添加顯示文章的邏輯。將原來頁面中的重復(fù)顯示的代碼:
<div class="item">
    <div class="item-box  layer-photos-demo1 layer-photos-demo">
      ...
    </div>
</div>

改成如下代碼:

{{ range .notes}}
<div class="item">
    <div class="item-box  layer-photos-demo1 layer-photos-demo">
        <h3><a href="details.html">{{.Title}}</a></h3>
        <h5>發(fā)布于:<span>{{date .UpdatedAt "Y-m-d H:i:s"}}</span></h5>
        <p>{{.Summary}}</p>
    </div>
    <div class="comment count">
        <a href="details.html#comment">評(píng)論</a>
        <a href="javascript:;" class="like">點(diǎn)贊</a>
    </div>
</div>
{{end}}
4.2 我們?yōu)榱藢?shí)現(xiàn)上一頁和下一頁的功能爪幻,我們需要對(duì)當(dāng)前頁進(jìn)行加一和減一操作菱皆,因此我們需要添加模版方法须误,方便運(yùn)算。修改main.go->initTemplate方法仇轻,代碼如下:
func initTemplate() {
    ....
    beego.AddFuncMap("add", func(x, y int) int {
        return x+y
    })
}
4.3 我們繼續(xù)修改views-index.html 添加上一頁和下一頁的功能京痢,代碼如下
<div class="item-btn">
    {{ if gt .page 1 }}
    <button class="layui-btn layui-btn-normal"
        onclick="window.location.href='/?page={{add .page -1}}'"
    >上一頁</button>
    {{end}}
    {{if lt .page .totpage}}
    <button class="layui-btn layui-btn-normal"
            onclick="window.location.href='/?page={{add .page 1}}'"
    >下一頁</button>
    {{end}}
</div>

文章列表功能 已經(jīng)完成。


文章查詢功能

1. 功能分析

文章查詢功能篷店,我們還是需要修改首頁的路由對(duì)應(yīng)的控制邏輯controllers->index.go中的Get方法祭椰,頁面?zhèn)鱰itle參數(shù)到后臺(tái),后臺(tái)根據(jù)title進(jìn)行模糊查詢疲陕,因此我們需要繼續(xù)修改“文章列表功能”方淤。

2. 數(shù)據(jù)庫邏輯調(diào)整

2.1 修改數(shù)據(jù)庫查詢文章的功能,添加模糊匹配title字段

修改models->note.go文件蹄殃,代碼如下:

func QueryNotesByPage(title string ,page,limit int) (note []*Note,err error) {
       // 模糊匹配 title字段
       //.Where("title like ? ",fmt.Sprintf("%%%s%%",title))
   return note,db.Where("title like ? ",fmt.Sprintf("%%%s%%",title)).Offset((page-1)*limit).Limit(limit).Find(&note).Error
}
2.1 同理携茂,我們也要修改數(shù)據(jù)庫查詢文章的總數(shù)量的功能

修改models->note.go文件,代碼如下:

func QueryNotesCount(title string)(count int,err error)  {
    //同QueryNotesByPage的修改一致
    return count,db.Model(&Note{}).Where("title like ? ",fmt.Sprintf("%%%s%%",title)).Count(&count).Error
}

3. 控制器邏輯調(diào)整

3.1 繼續(xù)修改 controllers->index.go中的Get方法:
// @router / [get]
func (this *IndexController) Get() {
    ...
    title := this.GetString("title")
    //根據(jù) 當(dāng)前頁 和 每頁顯示的行數(shù) 得到文章列表數(shù)據(jù)集
    notes, err := models.QueryNotesByPage(title,page, limit)
    ...
    //得到文章的總行數(shù)
    count, err := models.QueryNotesCount(title)
    ...
    this.Data["title"] = title
    this.TplName = "index.html"
}

4. 前臺(tái)頁面調(diào)整

4.1. 修改views->index.html頁面诅岩,在“上一頁”和“下一頁”的功能中讳苦,跳轉(zhuǎn)的鏈接添加帶上title字段,代碼如下:
<!--請(qǐng)注意吩谦,onclick里面多了 &title={{.title}} -->
<div class="item-btn">
    {{ if gt .page 1 }}
    <button class="layui-btn layui-btn-normal"
        onclick="window.location.href='/?page={{add .page -1}}&title={{.title}}'"
    >上一頁</button>
    {{end}}
    {{if lt .page .totpage}}
    <button class="layui-btn layui-btn-normal"
            onclick="window.location.href='/?page={{add .page 1}}&title={{.title}}'"
    >下一頁</button>
    {{end}}
</div>

文章查詢的功能已經(jīng)實(shí)現(xiàn)


貼個(gè)頁面效果圖
文章列表

廣告:

  1. 本專集也做了視頻教程 : B站地址 鸳谜,前期可能視頻和專集有的細(xì)微差別,望大家諒解式廷。歡迎大家關(guān)注咐扭。
  2. 最近做幾個(gè)視頻,歡迎大家觀賞滑废!這些視頻源碼:github倉庫 草描。
    B站001B站002策严、B站002B站004
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饿敲,一起剝皮案震驚了整個(gè)濱河市妻导,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怀各,老刑警劉巖倔韭,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瓢对,居然都是意外死亡寿酌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門硕蛹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來醇疼,“玉大人硕并,你說我怎么就攤上這事⊙砭#” “怎么了倔毙?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)乙濒。 經(jīng)常有香客問我陕赃,道長(zhǎng),這世上最難降的妖魔是什么颁股? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任么库,我火速辦了婚禮,結(jié)果婚禮上甘有,老公的妹妹穿的比我還像新娘诉儒。我一直安慰自己,他們只是感情好梧疲,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布允睹。 她就那樣靜靜地躺著,像睡著了一般幌氮。 火紅的嫁衣襯著肌膚如雪缭受。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天该互,我揣著相機(jī)與錄音米者,去河邊找鬼。 笑死宇智,一個(gè)胖子當(dāng)著我的面吹牛蔓搞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播随橘,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼喂分,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了机蔗?” 一聲冷哼從身側(cè)響起蒲祈,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萝嘁,沒想到半個(gè)月后梆掸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牙言,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年酸钦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咱枉。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卑硫,死狀恐怖徒恋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拔恰,我是刑警寧澤因谎,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站颜懊,受9級(jí)特大地震影響财岔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜河爹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一匠璧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咸这,春花似錦夷恍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侄刽,卻和暖如春指黎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背州丹。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工醋安, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人墓毒。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓吓揪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親所计。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柠辞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344