演示地址 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() }
好的,点击留言链接看看效果:
下一章我们来实现它。
有疑问加站长微信联系(非本文作者)