【Go web開發之revel+mgo】第7章 實現歸檔

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

1.設計歸檔頁面

首先在開始之前,我要說一下,有的同學在做的時候可能發現import的時候,一會是"MyTest/app/models",一會是"GBlog/app/models" 這是我的錯,沒有說明,我自己完成的是GBlog項目,現在做的教程是拿MyTest這個給大家做的,所以把前面改成你的項目名稱就行,不用跟我這一樣。為什麼要特別說一下呢,我怕有些同學,做的時候出了錯,而找不到原因,自己明明跟著教程做的為什麼是錯的呢。這樣可能打擊他的興趣。所以這裡說明一下。本來我想回去都改一下的,畢竟也花不了多久時間,但是畢竟有些問題還是需要大家自己解決的,所以才在這裡說明。

好下面我們來做歸檔頁面,在views/App下建立History.html,內容:

{{set . "title" "History blogs - GBlog"}}{{set . "history" "active" }}{{template "header.html" .}}<div class="content">    <div class="history-nav" id="his">       <div class="history-title">         部落格歸檔       </div>       <div class="history-cell">          <div class="panel-heading" style="padding:0;border-bottom: 1px dashed #ccc;">            <a data-toggle="collapse" data-toggle="collapse" data-parent="#his" href="#collapseOne">2014</a>          </div>          <div id="collapseOne" class="panel-collapse collapse in">            <div class="panel-body" style="padding:0 20px;">              <ul style="padding:10px 10px;list-style:none;">                <li><time>2014-04-01</time><a href="#">Abourt the blog</a><span class="history-auth">By jov</span></li>              </ul>            </div>          </div>       </div>    </div></div>{{template "footer.html" .}}

在controllers/app.go添加方法:

func (c App) History() revel.Result {return c.Render()}

好,下面添加我們的路由,conf/routes:

GET     /history                                App.History

看一下效果:


下面我們來實現它,在models裡面建立history.go 內容:

package modelsimport ("github.com/revel/revel""labix.org/v2/mgo/bson""time")type History struct {Year intBlogs []Blog}func (dao *Dao) InsertHistory(history *History) error {historyCollection := dao.session.DB(DbName).C(HistoryCollection)err := historyCollection.Insert(history)if err != nil {revel.WARN.Printf("Unable to save History: %v error %v", history, err)}return err}func (dao *Dao) FindHistory() []History{historyCollection := dao.session.DB(DbName).C(HistoryCollection)his := []History{}query := historyCollection.Find(bson.M{}).Sort("-year")query.All(&his)return his}func (dao *Dao) RemoveAll() error{historyCollection := dao.session.DB(DbName).C(HistoryCollection)_,err := historyCollection.RemoveAll(bson.M{})if err != nil {revel.WARN.Printf("Unable to RemoveAll: error %v",  err)}return err}func (dao *Dao) CreateAllHistory() {dao.RemoveAll();var end int = time.Now().Year();for i:=BaseYear;i<=end;i++{history := new(History);history.Year = i;dao.InsertHistory(history);}}

這個model只有兩個屬性,但是儲存到db中的只有year屬性,看一下最後的方法,我們以BaseYear為基礎,判斷當前年與baseyear之間的差,然後做歸檔。

好,在controllers/app.go的History方法中,做如下修改:

func (c App) History() revel.Result {dao, err := models.NewDao()if err != nil {c.Response.Status = 500return c.RenderError(err)}defer dao.Close()dao.CreateAllHistory();historys := dao.FindHistory();for i,_ := range historys{historys[i].Blogs =dao.FindBlogsByYear(historys[i].Year);}return c.Render(historys)}

這裡又多了一個方法,按年查詢blog,下面我們在models/blog.go中添加方法:

func (dao *Dao) FindBlogsByYear(year int) []Blog{blogCollection := dao.session.DB(DbName).C(BlogCollection)blogs := []Blog{}query := blogCollection.Find(bson.M{"year":year}).Sort("-cdate")query.All(&blogs)return blogs}

好的,修改我們的頁面,views/App/History.html:

{{set . "title" "History blogs - GBlog"}}{{set . "history" "active" }}{{template "header.html" .}}<div class="content">    <div class="history-nav" id="his">       <div class="history-title">         部落格歸檔       </div>       {{if .historys}}       {{range $index,$history :=.historys}}       <div class="history-cell">          <div class="panel-heading" style="padding:0;border-bottom: 1px dashed #ccc;">            <a data-toggle="collapse" data-toggle="collapse" data-parent="#his" href="#collapseOne{{$index}}">{{$history.Year}}</a>          </div>          <div id="collapseOne{{$index}}" class="panel-collapse collapse in">            <div class="panel-body" style="padding:0 20px;">              <ul style="padding:10px 10px;list-style:none;">                {{if $history.Blogs }}                {{range $blog :=$history.Blogs}}                <li><time>{{$blog.CDate.Format "2006-01-02"}}</time><a href="#">{{$blog.GetShortTitle }}</a><span class="history-auth">By {{$blog.Email}}</span></li>                {{end}}                {{end}}              </ul>            </div>          </div>       </div>       {{end}}       {{end}}    </div></div>{{template "footer.html" .}}



好了,ok,來看看結果:


你是否已經ok了呢?

源碼地址:https://github.com/joveth/GBlog

交流QQ:158325682

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.