這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
示範地址 http://gblog-revel.herokuapp.com/
1.樣式
這是整個項目的css,為了減少麻煩我們把它全部放出來 styles.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;}.write-nav{padding: 10px;background-color: #f9f9f9;border: 1px solid #e4e4e4;border-radius: 5px;}.footer{margin:20px 0 10px 0;text-align: center;min-height: 20px;}.comment-nav,.history-nav{background-color: white;border: 1px solid #DDD;border-radius: 4px;}.comment-title,.history-title{padding: 10px 20px;border-bottom: 1px solid #e2e2e2;font-size: 15px;font-weight: bold;}.comment-cell{padding: 10px 10px;border-top: 2px solid #fff;border-bottom: 1px solid #e2e2e2;}.comment-inputbox{background-color: #E7E7D8;border: 1px solid #d6d6c6;padding:5px 10px;border-radius: 8px;height: 224px;}.comment-input-infor{float: left;width: 180px;height: 200px;display: inline;overflow: hidden;margin:5px 0 0 0;list-style: none;padding:0;}.comment-input-text{float: left;width: 458px;height: 150px;margin:5px 0 0 10px;}.ctextarea {height: 142px !important;resize: vertical;}.comment-input-text-btn{float:right;margin-top:20px;}.func-color{color: #F70246;}.func-name{color: #24C54B;}.func-str{color:#C29916;}.func-type{color:rgb(0, 173, 255);}.pln-w{color:white;}.pln-b{color:white;}.history-cell{padding: 10px 20px;border-top: 2px solid #fff;border-bottom: 1px solid #e2e2e2;}li time{margin-right: 8px;font-size: 13px;}.history-auth{padding-left: 8px;color: #cfcfcf;font-size: 13px;font-family: 'Microsoft Yahei';}.email-other{background-color: #f9f9f9;border: 1px solid #e4e4e4;border-radius: 5px;padding: 5px 20px;margin-bottom: 10px;}.email-title{margin: 0 0 22px;padding-top: 21px;color: white;font-family: 'Microsoft Yahei';}.email-nav ul{list-style-type: none;margin: 0 0 26px;padding:0;}.email-nav ul li:first-child {border-top: none;padding-top: 1px;}.email-nav ul li {border-top: 1px solid #1bc6a5;line-height: 19px;padding: 6px 0;}.email-tag{border-radius: 4px;background: #1abc9c;color: white;cursor: pointer;margin-right: 5px;margin-bottom: 5px;overflow: hidden;padding: 6px 13px 6px 19px;position: relative;vertical-align: middle;display: inline-block;zoom: 1;-webkit-transition: 0.14s linear;-moz-transition: 0.14s linear;-o-transition: 0.14s linear;transition: 0.14s linear;-webkit-backface-visibility: hidden;}.email-tag span{color: white;cursor: pointer;zoom: 1;}.email-nav{background: white;border: 2px solid #1abc9c;border-radius: 6px;padding: 6px 1px 1px 6px;overflow-y: auto;text-align: left;margin-bottom: 15px;}.email-tag:hover {background-color: #16a085;padding-left: 12px;padding-right: 20px;}.erro{color:red;}.infor-content,.comments{margin-bottom: 20px;padding: 10px 20px;background-color: white;border: 1px solid #DDD;border-radius: 4px;-webkit-border-radius: 4px;-moz-border-radius: 4px;-o-border-radius: 4px;-khtml-border-radius: 4px;}.infor-header{padding-bottom: 9px;margin: 0 0 20px;border-bottom: 1px solid #eee;}.infor-header h3{margin-top:10px;}.infor-body{padding-bottom: 9px;}hr {margin: 9px 0;}dl.the-comments dd{margin-left: 0;padding-top: 10px;padding-bottom: 10px;border-bottom: 1px dashed #CCC;}.user-comment p{margin:5px 0 0 0;}
2.留言板設計
在views/App下建立Message.html 內容:
{{set . "title" "Message - GBlog"}}{{set . "mess" "active" }}{{template "header.html" .}}<div class="content"> <div class="comment-nav"> <div class="comment-title"> 留言板 <span style="float:right" title="Total messages">[100]</span> </div> <div class="comment-cell"> <div class="comment-inputbox"> <form action="/putmessage" method="post" > <ul class="comment-input-infor"> {{with $field := field "message.Email" .}} <li> EMAIL <input type="email" id="{{$field.Id}}" name="{{$field.Name}}" class="form-control " required value="{{if $field.Error}}{{$field.Error}}{{else}}{{$field.Value}}{{end}}"/> </li> {{end}} <li> QQ {{with $field := field "message.QQ" .}} <input type="text" id="{{$field.Id}}" name="{{$field.Name}}" class="form-control" value="{{if $field.Error}}{{$field.Error}}{{else}}{{$field.Value}}{{end}}" /> {{end}} </li> <li> 個人首頁 {{with $field := field "message.Url" .}} <input type="text" id="{{$field.Id}}" name="{{$field.Name}}" class="form-control" placeholder="Don't with http:// " value="{{if $field.Error}}{{$field.Error}}{{else}}{{$field.Value}}{{end}}"/> {{end}} </li> </ul> <div class="comment-input-text"> MESSAGE <div> {{with $field := field "message.Content" .}} <textarea class="form-control ctextarea" id="{{$field.Id}}" name="{{$field.Name}}" required>{{if $field.Error}}{{$field.Error}}{{else}}{{$field.Value}}{{end}}</textarea> {{end}} </div> </div> <button type="submit" class="btn btn-success comment-input-text-btn">SUBMIT</button> </form> </div> </div> <div class="comment-cell"> <pre ><code><span class="func-color">func</span><span class="func-name"> UserMessage</span><span class="pln">() </span><span class="pun">{</span><span class="pln"> </span><span class="func-color">var</span><span class="pun"> </span><span class="pln">email </span><span class="func-type">string </span><span class="pun">=</span><span class="pln"> </span><span class="func-str">"jov123@163.com"</span><span class="pun">;</span><span class="pln-w"> </span><span class="func-color">var</span><span class="pln-w"> </span><span class="pln">url </span><span class="pln">=</span><span class="pln-w"> </span><a href="http://jov.herokuapp.com" class="func-str" target="_blank">http://jov.herokuapp.com</a><span class="pln-w">;</span><span class="pln"> </span><span class="lit">Date </span><span class="func-color">:=</span><span class="pln"> </span><span class="func-str">"2014-04-15 12:50"</span><span class="pun">;</span><span class="pln"> </span><span class="func-color">var </span><span class="lit">Message</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="func-str">"nice!"</span><span class="pln">;</span><span class="pun">}</span><span class="pln"></code></pre> </div> <div class="comment-cell"> <pre style="background:#2d2d2d;"><code><span class="func-color">func</span><span class="func-name"> UserMessage</span><span class="pln-w">() </span><span class="pln-w">{</span><span class="pln-w"> </span><span class="func-color">var</span><span class="pln-w"> </span><span class="pln-w">email </span><span class="func-type">string </span><span class="pln-w">=</span><span class="pln-w"> </span><span class="func-str">"jov123@163.com"</span><span class="pln-w">;</span><span class="pln-w"> </span><span class="func-color">var</span><span class="pln-w"> </span><span class="pln-w">url </span><span class="pln-w">=</span><span class="pln-w"> </span><a href="http://jov.herokuapp.com" class="func-str" target="_blank">http://jov.herokuapp.com</a><span class="pln-w">;</span><span class="pln-w"> </span><span class="pln-w">Date </span><span class="func-color">:=</span><span class="pln-w"> </span><span class="func-str">"2014-04-15 12:50"</span><span class="pln-w">;</span><span class="pln-w"> </span><span class="func-color">var </span><span class="pln-w">Message</span><span class="pln-w"> </span><span class="pln-w">=</span><span class="pln-w"> </span><span class="func-str">"nice!"</span><span class="pln-w">;</span><span class="pln-w">}</span><span class="pln-w"></code></pre> </div> </div></div>{{template "footer.html" .}}
雖然後面的塊很亂,不要在意那麼多了。
在conf/routes添加;
GET /message App.Message
在app/controllers/app.go添加方法:
func (c App) Message() revel.Result {return c.Render()}
好的,點擊留言連結看看效果:
下一章我們來實現它。