beego開發(fā)輕博客——第九講 留言功能

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

本章目標:添加“系統(tǒng)留言”功能
github: 打開后吉嫩,點擊右上角star按鈕
視頻教程: B站地址
簡書專集:點我


留言新增功能

1. 功能分析

留言功能與文章評論的功能相似渺杉,只是文章評論是對于具體的文章的价涝。因此,我們留言功能的數(shù)據(jù)也保存到評論表中劳跃,只是所屬文章的notekey字段是空啸胧,我們以評論表的notekey字段是否為空,來判斷是否是系統(tǒng)留言双揪。

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

2.1 修改controllers->message.go,修改新增評論的路由NewMessage方法包帚,讓該方法也能支持 留言的新增,代碼如下:

// 添加了“运吓?”渴邦,標示key可以為空
//@router /new/?:key [post]
func(this *MessageController) NewMessage()  {
        ...
      //將新增后的留言信息返回。
    this.JSONOkH("保存成功拘哨!",H{"data":m});
}

3. 修改前臺頁面

3.1 修改views->message.html 頁面,將原被注釋掉的js模版代碼谋梭,輸出到頁面,修改代碼如下:
...
{{template "comm/footer.html" .}}
        {{str2html `
        <script id="LAY-msg-tpl" type="text/html">
        <div class="info-box">
            <div class="info-item">
                <img class="info-img" src="{{ d.avatar }}" alt="">
              <div class="info-text">
                    <p class="title">
                      <span class="name">{{ d.username }}</span>
                      <span class="info-img">
                        <i class="layui-icon layui-icon-praise"></i>
                        {{ d.praise }}
                        </span>
                    </p>
                    <p class="info-intr">
                        {{ d.content }}
                    </p>
              </div>
            </div>
        </div>
    </script>
        `}}
</body>
3.2 修改static->js->blog.js,修改頁面調(diào)整路徑,修改代碼如下:
//這一段代碼,監(jiān)聽留言頁面的提交按鈕的點擊事件
//我們修改這段代碼倦青,想后臺發(fā)送請求瓮床。
$('#item-btn').on('click', function(){
    var elemCont = $('#LAY-msg-content')
    ,content = elemCont.val();
    if(content.replace(/\s/g, '') == ""){
      layer.msg('請先輸入留言');
      return elemCont.focus();
    }
    // 發(fā)送post請求
    $.post("/message/new",{content: content},function (ret) {
      if(ret.code==0){
          //新增成功,畫頁面
           var view = $('#LAY-msg-tpl').html()
               //模擬數(shù)據(jù)
               ,data = {
                   username: ret.data.user.name
                   ,avatar: ret.data.user.avatar||'/static/images/info-img.png'
                   ,praise: ret.data.praise
                   ,content: ret.data.content
                   ,key :ret.data.key
               };
          
           //模板渲染
           laytpl(view).render(data, function(html){
               $('#LAY-msg-box').prepend(html);
               elemCont.val('');
               layer.msg('留言成功', {
                   icon: 1
               })
           });
      }else{
        layer.msg(ret.msg);
      }
    }).error(function () {
        layer.msg("網(wǎng)絡(luò)異常");
    })
  });

新增留言功能,我們已經(jīng)實現(xiàn)


留言顯示功能

1. 功能分析

留言列表隘庄,需要使用分頁功能踢步,我們使用layui的laypage功能來實現(xiàn)分頁功能。laypage需要知道頁面總數(shù)量丑掺,因此我們需要添加 獲取頁面總數(shù)量的控制器方法和根據(jù)第幾頁每頁多少行查詢數(shù)據(jù)的方法获印。我們設(shè)定:查詢文章總數(shù)量的路由為/message/count,查詢文章的路由問題/message/query

2. 修改前臺頁面

2.1 修改static->js->blog.js,我們將畫留言頁面的js代碼抽成drawMessage方法,代碼如下:
function drawMessage(message) {
      var view = $('#LAY-msg-tpl').html()
          //模擬數(shù)據(jù)
          ,data = {
              username: message.user.name
              ,avatar: message.avatar||'/static/images/info-img.png'
              ,praise: message.praise
              ,content: message.content
              ,key :message.key
          };
      //模板渲染
      return laytpl(view).render(data);
  }
2.2 修改static->js->blog.js,修改原來新增留言的js代碼街州,畫留言頁面的代碼替換成調(diào)用drawMessage方法,代碼如下:
$.post("/message/new",{content: content},function (ret) {
      if(ret.code==0){
          //下面這樣為修改的代碼
          var html = drawMessage(ret.data);
          $('#LAY-msg-box').prepend(html);
          elemCont.val('');
          layer.msg('留言成功', {
              icon: 1
          })
      }else{
        layer.msg(ret.msg);
      }
    }).error(function () {
        layer.msg("網(wǎng)絡(luò)異常");
    })
2.3 修改static->js->blog.js,添加向后臺查詢總留言數(shù)的邏輯(不采用異步查詢):
//通過判斷頁面是否存在id為“test1”的元素兼丰,判斷是否是留言頁面,如果是留言頁面再獲取留言頁面的數(shù)據(jù)
if($("#test1").size()>0) {
     var count = 0;
        $.ajax({
            url: "message/count",
            type: "GET",
            async: false,//不是異步唆缴,是同步請求鳍征,等執(zhí)行這段代碼才能必須下面的代碼
            success: function (ret) {
                count = ret.count;
            },
            error: function () {
                layer.msg("網(wǎng)絡(luò)異常")
            }
        });
}
2.4 修改static->js->blog.js,添加根據(jù)當前頁和每頁顯示數(shù)量獲取留言列表,并將留言列表畫到頁面上的邏輯
    if($("#test1").size()>0) {
        ...
        laypage.render({
            elem: 'test1' //注意面徽,這里的 test1 是 ID艳丛,不用加 # 號
            , count: count //數(shù)據(jù)總數(shù),從服務(wù)端得到
            , theme: '#1e9fff'
            , limit: 5
            , jump: function (obj, first) {
                //obj包含了當前分頁的所有參數(shù)斗忌,比如:
                console.log(obj.curr); //得到當前頁质礼,以便向服務(wù)端請求對應(yīng)頁的數(shù)據(jù)。
                console.log(obj.limit); //得到每頁顯示的條數(shù)
                //查詢留言的路徑為:/message/query
                $.get("/message/query", {pageno: obj.curr, pagesize: obj.limit}, function (ret) {
                    if (ret.code == 0) {
                        // 循環(huán)后臺返回的留言列表织阳,拼出html頁面
                        var datas = ret.data;
                        var html = "";
                        for (var i = 0; i < datas.length; i++) {
                            //拼頁面
                            html += drawMessage(datas[i]);
                        }
                        var $html = $(html);
                        $("#LAY-msg-box").html($html);
                    } else {
                        layer.msg(ret.msg);
                    }
                }).error(function () {
                    layer.msg("網(wǎng)絡(luò)異常眶蕉!")
                });
            }
        });
    }

3. 數(shù)據(jù)庫邏輯

3.1 修改models->message.go 文件,添加根據(jù)文章的key(notekey)查詢留言或評論的總行數(shù)的方法(留言的notekey傳“”)唧躲,代碼如下:
func QueryMessagesCountByNoteKey(notekey string) (count int ,err error) {
    return count, db.Model(&Message{}).Where("note_key = ? ",notekey).Count(&count).Error
}
3.2 修改models->message.go 文件造挽,添加根據(jù)文章的key(notekey)、當前頁弄痹,頁面行數(shù)來查詢留言或評論的數(shù)據(jù)集的方法(留言的notekey傳“”)饭入,代碼如下:
func QueryPageMessagesByNoteKey(notekey string ,pageno ,pagesize int) (ms []*Message,err error)  {
    return ms,db.Preload("User").Where("note_key = ? ",notekey).Offset((pageno-1)*pagesize).Limit(pagesize).Order("updated_at desc").Find(&ms).Error
}

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

4.1 修改文件controllers->message.go,添加查詢留言總行數(shù)的控制器方法,代碼如下
//@router /count [get]
func (this *MessageController) Count()  {
    // 查詢 留言的總數(shù)量
    count,err:=models.QueryMessagesCountByNoteKey("");
    if err!=nil{
        //查詢報錯肛真,提示頁面失敗谐丢,并打印錯誤日志
        this.Abort500(syserror.New("查詢失敗",err))
    }
    // 將 留言的總數(shù)量 返回前臺
    this.JSONOkH("查詢成功",H{"count":count})
}
4.2 4.1 修改文件controllers->message.go,添加查詢根據(jù)當前頁和每頁行數(shù)來查詢留言列表的控制器方法,代碼如下
//@router /query [get]
func (this *MessageController) Query()  {
    //獲得第幾頁蚓让,默認第一頁
    pageno,err :=this.GetInt("pageno",1)
    if err!=nil||pageno<1{
        pageno=1
    }
    //獲得每頁顯示多少條數(shù)據(jù)乾忱,默認10條
    pagesize,err:= this.GetInt("pagesize",10)
    if err!=nil{
        pagesize=10
    }
    //調(diào)用數(shù)據(jù)庫方法,查詢出留言的數(shù)據(jù)集
    ms ,err:=models.QueryPageMessagesByNoteKey("",pageno,pagesize);
    if err!=nil{
        //查詢報錯历极,提示頁面失敗窄瘟,并打印錯誤日志
        this.Abort500(syserror.New("查詢失敗",err))
    }
    this.JSONOkH("查詢成功",H{"data":ms})
}

顯示留言信息的功能,我們已經(jīng)實現(xiàn)。


貼個頁面效果圖
image.png


廣告:

  1. 本專集也做了視頻教程 : B站地址 趟卸,前期可能視頻和專集有的細微差別蹄葱,望大家諒解氏义。歡迎大家關(guān)注。
  2. 支持作者:你可以點贊 github图云、關(guān)注B站惯悠。也可以打賞作者。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末琼稻,一起剝皮案震驚了整個濱河市吮螺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌帕翻,老刑警劉巖鸠补,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘀掸,居然都是意外死亡紫岩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門睬塌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泉蝌,“玉大人,你說我怎么就攤上這事揩晴⊙悖” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵硫兰,是天一觀的道長诅愚。 經(jīng)常有香客問我,道長劫映,這世上最難降的妖魔是什么违孝? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮泳赋,結(jié)果婚禮上雌桑,老公的妹妹穿的比我還像新娘。我一直安慰自己祖今,他們只是感情好校坑,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著千诬,像睡著了一般撒踪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上大渤,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音掸绞,去河邊找鬼泵三。 笑死耕捞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的烫幕。 我是一名探鬼主播俺抽,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼较曼!你這毒婦竟也來了磷斧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤捷犹,失蹤者是張志新(化名)和其女友劉穎弛饭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萍歉,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡侣颂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了枪孩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憔晒。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔑舞,靈堂內(nèi)的尸體忽然破棺而出拒担,到底是詐尸還是另有隱情,我是刑警寧澤攻询,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布从撼,位于F島的核電站,受9級特大地震影響蜕窿,放射性物質(zhì)發(fā)生泄漏谋逻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一桐经、第九天 我趴在偏房一處隱蔽的房頂上張望毁兆。 院中可真熱鬧,春花似錦阴挣、人聲如沸气堕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茎芭。三九已至,卻和暖如春誓沸,著一層夾襖步出監(jiān)牢的瞬間梅桩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工拜隧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宿百,地道東北人趁仙。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像垦页,于是被迫代替她去往敵國和親雀费。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1痊焊、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_x閱讀 15,968評論 3 119
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,898評論 2 89
  • 用兩張圖告訴你盏袄,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,693評論 2 59
  • 倆期課程中間的空檔期逛漫,干了很多活,洗衣服赘艳,收拾放映廳酌毡,中午海霞師姐和楊師兄過來了,很開心蕾管,楊師兄已經(jīng)是內(nèi)觀老師了枷踏,...
    halfbook閱讀 931評論 1 0
  • 天灰灰問君何日歸北國皚皚南天似春暉 粵人北往諸多不適愿你心安體健把事妥速速回下一首:《那年那事……》
    蔣光頭jL94430閱讀 798評論 39 82