【Go web開發之revel+mgo】第2章 Blog的首頁與投稿設計

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

示範地址   http://gblog-revel.herokuapp.com/

1.首頁

好,我用revel new GBlog 建了我們的項目。
在設計之前(為什麼總是設計,沒有結果沒有動力啊),我們先來做點東西。將public/css/bootstrap.css刪了換成bootstrap3(因為它給我們產生的是2,我喜歡用3,不能說喜歡,而是正在用3,你也可以繼續使用2哦!可能樣式有點不一樣而已。),在public/css/建立一個我們的樣式:style.css,,新增內容:
body{margin: 0 auto;padding: 0;background: url('../img/section_bg.png');font: 14px "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif;line-height: 20px;letter-spacing: 0.02em;color: #666;background-attachment:fixed;}a{color: #1abc9c;text-decoration: none;-webkit-transition: 0.25s;-moz-transition: 0.25s;-o-transition: 0.25s;transition: 0.25s;-webkit-backface-visibility: hidden;}.main-nav{margin: 0 auto;width: 692px;padding:0;}.top-bar{width:100%;background: #34495e;border-bottom-right-radius: 6px;border-bottom-left-radius: 6px;box-shadow:  0 2px rgba(0,0,0,0.075),0 0 6px #7aba7b;-webkit-box-shadow:0 2px  rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:0 2px  rgba(0,0,0,0.075),0 0 6px #7aba7b;margin-bottom:28px;}.top-bar-inner{min-height: 48px;padding:0 4px;}.ul-nav{position: relative;left: 0;display: block;float: left;margin: 0 10px 0 0;list-style: none;font-size: 18px;padding:0;}.ul-nav>li {position: relative;float: left;line-height: 20px;}.ul-nav>li>a{padding: 14px 24px 17px;text-decoration: none;display: block;color: white;text-shadow: 0 -1px 0 rgba(0,0,0,0.25);}.ul-nav>li>a:hover,.ul-nav>li>a:focus{color: #1abc9c;}.navbar-news {background-color: #e74c3c;border-radius: 30px;color: white;display: block;font-size: 12px;font-weight: 500;line-height: 18px;min-width: 8px;padding: 0 5px;position: absolute;right: -7px;text-align: center;text-shadow: none;top: 8px;z-index: 10;}.ul-nav .active > a, .ul-nav .active > a:hover, .ul-nav .active > a:focus {  background-color: transparent;  color: #1abc9c;  -webkit-box-shadow: none;  -moz-box-shadow: none;  box-shadow: none; }.cell{background-color:#1bc6a5;color: #cff3ec;font-size: 15px;border-radius: 4px;-webkit-border-radius: 4px;-moz-border-radius: 4px;-o-border-radius: 4px;-khtml-border-radius: 4px;padding: 18px 20px 0px 20px; margin-bottom: 30px;box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);}.cell-subject{margin: 0;}.cell-subject-title{color: #34495e;font-size: 24px;font-weight: 700;text-decoration: none;}a.cell-subject-title:hover{text-decoration: underline;}.subject-infor{color:#34495e;line-height: 19px;padding: 2px 0;font-size: 13px;margin:2px 0;}.cell-text{padding: 4px 0;word-break: break-all;}.comment-num{float:right;border: 5px solid #d7dce0;border-radius: 50px;font-size: 14px;line-height: 16px;padding: 0 4px;-webkit-transition: background 0.2s ease-out, border-color 0s ease-out, color 0.2s ease-out;-moz-transition: background 0.2s ease-out, border-color 0s ease-out, color 0.2s ease-out;-o-transition: background 0.2s ease-out, border-color 0s ease-out, color 0.2s ease-out;transition: background 0.2s ease-out, border-color 0s ease-out, color 0.2s ease-out;-webkit-backface-visibility: hidden;background-color: white;border-color: white;border-width: 2px;color: #BBB6B6;}

恩其中的背景圖片,太小了,上傳上來也看不清除,大家自己找一個或者不用也行。關於css這種東西,不會寫,我們就copy,這種東西,只能說你喜歡就認真去做,不喜歡,就隨便高高。
好,開啟app/views/header.html,添加進去:
<link rel="stylesheet" type="text/css" href="/public/css/styles.css">

等一下,我們先來看看header.html裡面的內容:
<!DOCTYPE html><html>  <head>    <title>{{.title}}</title>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <link rel="stylesheet" type="text/css" href="/public/css/bootstrap.min.css">    <link rel="stylesheet" type="text/css" href="/public/css/styles.css">    <link rel="shortcut icon" type="image/png" href="/public/img/favicon.png">    <script src="/public/js/jquery-1.9.1.min.js" type="text/javascript" charset="utf-8"></script>    {{range .moreStyles}}      <link rel="stylesheet" type="text/css" href="/public/{{.}}">    {{end}}    {{range .moreScripts}}      <script src="/public/{{.}}" type="text/javascript" charset="utf-8"></script>    {{end}}  </head>  <body>

{{.title}}這是一個變數我們後面會看到,css與js的引入到沒什麼區別,不過icon這個不錯,居然支援png等格式。{{range .moreStyles}}和{{range .moreScripts}}這兩個是迴圈,也就是說我們如果不同的頁面需要不同的css檔案或者js檔案,我們可以在那個頁面上採用

{{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}這種凡是把我們需要的東西載入進去。由於,我們目前東西比較少,這兩個迴圈可以去掉。


那麼在header.html的body之後加入下面代碼:


<div class="container main-nav">    <div class="top-bar">        <div class="top-bar-inner">          <ul class="ul-nav ">              <li class="{{.home}}">                <a href="/" >Home</a>                <span class="navbar-news " title="最近1小時有1個更新">1</span>              </li>              <li class="{{.write}}">                <a href="/write" title="Put up your blogs">投稿</a>              </li>              <li class="{{.mess}}">                <a href="/message" title="Message Boards">留言</a>              </li>              <li class="{{.history}}">                <a href="/history" title="History blogs">歸檔</a>              </li>              <li class="{{.about}}">                <a href="/about" title="About Me">About Me</a>              </li>              <li class="{{.ema}}">                <a href="/email" title="The emails of the blog's author">Email</a>              </li>              <li>                <a href="#" title="">RSS</a>              </li>          </ul>        </div>    </div>

最後不要忘了在footer.html加入</div>,好我們來看一下效果:



恩,看起來還是不錯的,雖然有點挫。


 好,我們開啟views/App/Index.html(話說,大小寫很重要的哦,它是根據你方法的名稱來載入對於view下的頁面),把裡面的東西全部替換:
{{set . "title" "Home - GBlog" }}{{set . "home" "active" }}{{template "header.html" .}}<div class="content">    <div class="cell">      <div class="cell-subject">          <div>            <a href="#" class="cell-subject-title" ><strang>Test size=45</strang></a>            <a href="#" class="comment-num" title="Comments">10</a>          </div>          <div class="subject-infor">            <span class="label label-success">Author</span>   <span>jov123@163.com</span>              <span class="label label-default">Date</span>  2014-04-15 12:25              <span class="label label-info">Read</span>  0          </div>      </div>      <div class="cell-text">          <pre><code>怎麼說呢,稍微有點迷茫,不管是id</code></pre>      </div>    </div></div>{{template "footer.html" .}}

恩,看到了嗎,set . title這中東西很有作用把,template也不用我多說什麼把。再次重新整理看一下效果:

呀~~,是不是更挫了。好把。首頁就這樣完成了設計,下面我們先做投稿的設計,沒有投稿哪有資料啊,是不是?

2.投稿

在view/App/下建立WBlog.html,內容如下:
{{set . "title" "投稿 - GBlog"}}{{set . "write" "active" }}{{template "header.html" .}}<div class="content">    <div class="write-nav">      <form action="/putblog" method="post" >          <div class="form-group" >            <label style="font-weight: bold;">Title</label>            {{with $field := field "blog.Title" .}}            <input type="text" id="{{$field.Id}}" name="{{$field.Name}}"  class="form-control" style="width:98%;min-height:28px;" required  value="{{if $field.Flash}}{{$field.Flash}}{{else}}{{$field.Value}}{{end}}">              <span class="help-inline erro">{{$field.Error}}</span>            {{end}}          </div>          <div class="form-group" >            <label style="font-weight: bold;">Author</label>            {{with $field := field "blog.Email" .}}            <input type="email" id="{{$field.Id}}" name="{{$field.Name}}" class="form-control" style="width:98%;min-height:28px;" placeholder="Enter your email" required value="{{if $field.Flash}}{{$field.Flash}}{{else}}{{$field.Value}}{{end}}">              <span class="help-inline erro">{{$field.Error}}</span>            {{end}}          </div>          <div class="form-group" >            <label style="font-weight: bold;">Subject</label>            {{with $field := field "blog.Subject" .}}            <textarea class="form-control" id="{{$field.Id}}" name="{{$field.Name}}"  style="width:98%;line-height: 22px;height: 350px;resize: vertical;" required >{{if $field.Flash}}{{$field.Flash}}{{else}}{{$field.Value}}{{end}}</textarea>              <span class="help-inline erro">{{$field.Error}}</span>            {{end}}          </div>         <button type="submit" class="btn btn-success">Submit</button>      </form>    </div></div>{{template "footer.html" .}}

這裡面我先把後面要降到的的東西放了出來,先不用管,後面會講到。
那麼怎麼看效果呢,先在app/controllers/app.go 裡面加入一個方法:
func (c App) WBlog() revel.Result {return c.Render()}

來看這個方法,他的接收者是App,就是這個檔案上面的struct,它裡面放的是revel.Controller對象,這個我們不用管它,而c.Render(),相當與forward跳轉。在conf/routes裡面加入一個路由控制:
GET     /write                                  App.WBlog

當然我們也是可以通過http://localhost:9000/App/WBlog這樣的方式直接 訪問的,但是我不喜歡這種大寫的名稱(在go中你需要時刻注意大小寫,因為大寫相當於public的是可以被外部存取的),說明一下為什麼可以用這種方式訪問,看到conf/routes裡面的:
*       /:controller/:action                    :controller.:action

它已經給我們配置好了。
ok,我們刷一下頁面,點投稿看看效果:


有了這兩個基本的東西我們可以來實現它了。
內容比較多,我們在下一章來做實現。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.