Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 456684b

Browse files
committed
加综合晨读
1 parent b3549c5 commit 456684b

File tree

14 files changed

+543
-33
lines changed

14 files changed

+543
-33
lines changed
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
// Copyright 2014 The StudyGolang Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
// http://studygolang.com
5+
// Author:polaris [email protected]
6+
7+
package admin
8+
9+
import (
10+
"net/http"
11+
"strings"
12+
13+
"filter"
14+
"logger"
15+
"model"
16+
"service"
17+
)
18+
19+
// 所有晨读(分页)
20+
// /admin/reading/list
21+
func ReadingListHandler(rw http.ResponseWriter, req *http.Request) {
22+
curPage, limit := parsePage(req)
23+
24+
readings, total := service.FindReadingByPage(nil, curPage, limit)
25+
26+
if readings == nil {
27+
logger.Errorln("[ReadingListHandler]sql find error")
28+
rw.WriteHeader(http.StatusInternalServerError)
29+
return
30+
}
31+
32+
data := map[string]interface{}{
33+
"datalist": readings,
34+
"total": total,
35+
"totalPages": (total + limit - 1) / limit,
36+
"page": curPage,
37+
"limit": limit,
38+
}
39+
40+
// 设置内容模板
41+
req.Form.Set(filter.CONTENT_TPL_KEY, "/template/admin/reading/list.html,/template/admin/reading/query.html")
42+
filter.SetData(req, data)
43+
}
44+
45+
// /admin/reading/query.html
46+
func ReadingQueryHandler(rw http.ResponseWriter, req *http.Request) {
47+
curPage, limit := parsePage(req)
48+
49+
conds := parseConds(req, []string{"id", "rtype"})
50+
51+
readings, total := service.FindReadingByPage(conds, curPage, limit)
52+
53+
if readings == nil {
54+
logger.Errorln("[ReadingQueryHandler]sql find error")
55+
rw.WriteHeader(http.StatusInternalServerError)
56+
return
57+
}
58+
59+
data := map[string]interface{}{
60+
"datalist": readings,
61+
"total": total,
62+
"totalPages": (total + limit - 1) / limit,
63+
"page": curPage,
64+
"limit": limit,
65+
}
66+
67+
// 设置内容模板
68+
req.Form.Set(filter.CONTENT_TPL_KEY, "/template/admin/reading/query.html")
69+
filter.SetData(req, data)
70+
}
71+
72+
// /admin/reading/publish
73+
func PublishReadingHandler(rw http.ResponseWriter, req *http.Request) {
74+
var data = make(map[string]interface{})
75+
76+
if req.PostFormValue("submit") == "1" {
77+
urls := strings.Split(req.PostFormValue("urls"), "\n")
78+
79+
var errMsg string
80+
for _, articleUrl := range urls {
81+
_, err := service.ParseArticle(strings.TrimSpace(articleUrl), false)
82+
83+
if err != nil {
84+
errMsg = err.Error()
85+
}
86+
}
87+
88+
if errMsg != "" {
89+
data["ok"] = 0
90+
data["error"] = errMsg
91+
} else {
92+
data["ok"] = 1
93+
data["msg"] = "添加成功"
94+
}
95+
} else {
96+
97+
// 设置内容模板
98+
req.Form.Set(filter.CONTENT_TPL_KEY, "/template/admin/article/new.html")
99+
}
100+
101+
filter.SetData(req, data)
102+
}
103+
104+
func ModifyReadingHandler(rw http.ResponseWriter, req *http.Request) {
105+
var data = make(map[string]interface{})
106+
107+
if req.PostFormValue("submit") == "1" {
108+
user, _ := filter.CurrentUser(req)
109+
110+
errMsg, err := service.ModifyArticle(user, req.PostForm)
111+
if err != nil {
112+
data["ok"] = 0
113+
data["error"] = errMsg
114+
} else {
115+
data["ok"] = 1
116+
data["msg"] = "修改成功"
117+
}
118+
} else {
119+
article, err := service.FindArticleById(req.FormValue("id"))
120+
121+
if err != nil {
122+
rw.WriteHeader(http.StatusInternalServerError)
123+
return
124+
}
125+
126+
// 设置内容模板
127+
req.Form.Set(filter.CONTENT_TPL_KEY, "/template/admin/article/modify.html")
128+
data["article"] = article
129+
data["statusSlice"] = model.StatusSlice
130+
data["langSlice"] = model.LangSlice
131+
}
132+
133+
filter.SetData(req, data)
134+
}

websites/code/studygolang/src/controller/ajax.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"github.com/studygolang/mux"
2222
"logger"
23+
"model"
2324
"service"
2425
"util"
2526
)
@@ -34,7 +35,7 @@ func RecentReadingHandler(rw http.ResponseWriter, req *http.Request) {
3435
limit = "7"
3536
}
3637

37-
readings := service.FindReadings("0", limit)
38+
readings := service.FindReadings("0", limit, model.RtypeGo)
3839
buf, err := json.Marshal(readings)
3940
if err != nil {
4041
logger.Errorln("[RecentReadingHandler] json.marshal error:", err)

websites/code/studygolang/src/controller/reading.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"filter"
1414
"github.com/studygolang/mux"
15+
"model"
1516
"service"
1617
"util"
1718
)
@@ -26,7 +27,12 @@ func ReadingsHandler(rw http.ResponseWriter, req *http.Request) {
2627
lastId = "0"
2728
}
2829

29-
readings := service.FindReadings(lastId, "25")
30+
rtype, err := strconv.Atoi(req.FormValue("rtype"))
31+
if err != nil {
32+
rtype = model.RtypeGo
33+
}
34+
35+
readings := service.FindReadings(lastId, "25", rtype)
3036
if readings == nil {
3137
// TODO:服务暂时不可用?
3238
}
@@ -76,7 +82,7 @@ func ReadingsHandler(rw http.ResponseWriter, req *http.Request) {
7682

7783
req.Form.Set(filter.CONTENT_TPL_KEY, "/template/readings/list.html")
7884
// 设置模板数据
79-
filter.SetData(req, map[string]interface{}{"readings": readings, "page": pageInfo})
85+
filter.SetData(req, map[string]interface{}{"activeReadings": "active", "readings": readings, "page": pageInfo, "rtype": rtype})
8086
}
8187

8288
// 点击 【我要晨读】,记录点击数,跳转

websites/code/studygolang/src/filter/view.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -164,20 +164,22 @@ func (this *ViewFilter) PostFilter(rw http.ResponseWriter, req *http.Request) bo
164164
contentHtmls[i] = config.ROOT + strings.TrimSpace(contentHtml)
165165
}
166166

167-
// TODO: 新模版过渡
168-
if strings.Contains(req.RequestURI, "articles") ||
169-
strings.Contains(req.RequestURI, "favorites") ||
170-
strings.Contains(req.RequestURI, "project") ||
171-
strings.HasPrefix(req.RequestURI, "/p/") ||
172-
strings.Contains(req.RequestURI, "reading") ||
173-
strings.HasPrefix(req.RequestURI, "/wr") ||
174-
req.RequestURI == "/" ||
175-
strings.Contains(req.RequestURI, "search") {
176-
this.commonHtmlFiles = []string{config.ROOT + "/template/common/layout.html"}
177-
this.baseTplName = "layout.html"
178-
} else if !this.isBackView {
179-
this.commonHtmlFiles = []string{config.ROOT + "/template/common/base.html"}
180-
this.baseTplName = "base.html"
167+
if !this.isBackView {
168+
// TODO: 新模版过渡
169+
if strings.Contains(req.RequestURI, "articles") ||
170+
strings.Contains(req.RequestURI, "favorites") ||
171+
strings.Contains(req.RequestURI, "project") ||
172+
strings.HasPrefix(req.RequestURI, "/p/") ||
173+
strings.Contains(req.RequestURI, "reading") ||
174+
strings.HasPrefix(req.RequestURI, "/wr") ||
175+
req.RequestURI == "/" ||
176+
strings.Contains(req.RequestURI, "search") {
177+
this.commonHtmlFiles = []string{config.ROOT + "/template/common/layout.html"}
178+
this.baseTplName = "layout.html"
179+
} else {
180+
this.commonHtmlFiles = []string{config.ROOT + "/template/common/base.html"}
181+
this.baseTplName = "base.html"
182+
}
181183
}
182184

183185
// 为了使用自定义的模板函数,首先New一个以第一个模板文件名为模板名。

websites/code/studygolang/src/model/reading.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,34 @@
77
package model
88

99
import (
10+
"strings"
11+
1012
"logger"
1113
"util"
1214
)
1315

16+
const (
17+
RtypeGo = iota // Go技术晨读
18+
RtypeComp // 综合技术晨读
19+
)
20+
1421
// Go技术晨读
1522
type MorningReading struct {
1623
Id int `json:"id" pk:"1"`
1724
Content string `json:"content"`
25+
Rtype int `json:"rtype"`
26+
Inner int `json:"inner"`
1827
Url string `json:"url"`
28+
Moreurls string `json:"moreurls"`
1929
Username string `json:"username"`
2030
Clicknum int `json:"clicknum,omitempty"`
2131
Ctime string `json:"ctime,omitempty"`
2232

2333
// 晨读日期,从 ctime 中提取
2434
Rdate string `json:"rdate"`
2535

36+
Urls []string `json:"urls"`
37+
2638
// 数据库访问对象
2739
*Dao
2840
}
@@ -66,6 +78,9 @@ func (this *MorningReading) FindAll(selectCol ...string) ([]*MorningReading, err
6678
continue
6779
}
6880
reading.Rdate = reading.Ctime[:10]
81+
if reading.Moreurls != "" {
82+
reading.Urls = strings.Split(reading.Moreurls, ",")
83+
}
6984
readingList = append(readingList, reading)
7085
}
7186
return readingList, nil
@@ -96,15 +111,18 @@ func (this *MorningReading) Order(order string) *MorningReading {
96111
}
97112

98113
func (this *MorningReading) prepareInsertData() {
99-
this.columns = []string{"content", "url", "username"}
100-
this.colValues = []interface{}{this.Content, this.Url, this.Username}
114+
this.columns = []string{"content", "rtype", "inner", "url", "moreurls", "username"}
115+
this.colValues = []interface{}{this.Content, this.Rtype, this.Inner, this.Url, this.Moreurls, this.Username}
101116
}
102117

103118
func (this *MorningReading) colFieldMap() map[string]interface{} {
104119
return map[string]interface{}{
105120
"id": &this.Id,
106121
"content": &this.Content,
122+
"rtype": &this.Rtype,
123+
"inner": &this.Inner,
107124
"url": &this.Url,
125+
"moreurls": &this.Moreurls,
108126
"clicknum": &this.Clicknum,
109127
"username": &this.Username,
110128
"ctime": &this.Ctime,

websites/code/studygolang/src/server/studygolang/router.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,11 @@ func initRouter() *mux.Router {
190190
subrouter.HandleFunc("/crawl/rule/modify", admin.ModifyRuleHandler)
191191
subrouter.HandleFunc("/crawl/rule/del", admin.DelRuleHandler)
192192

193+
// 晨读管理
194+
subrouter.HandleFunc("/reading/list", admin.ReadingListHandler)
195+
subrouter.HandleFunc("/reading/query.html", admin.ReadingQueryHandler)
196+
subrouter.HandleFunc("/admin/reading/publish", admin.PublishReadingHandler)
197+
193198
apirouter := router.PathPrefix("/api").Subrouter()
194199
apirouter.HandleFunc("/user/login", api.LoginHandler)
195200
apirouter.HandleFunc("/blog/category/all", api.BlogCategoryHandler)

websites/code/studygolang/src/service/reading.go

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,25 @@ package service
88

99
import (
1010
"strconv"
11+
"strings"
1112

1213
"logger"
1314
"model"
1415
)
1516

1617
// 获取晨读列表(分页)
17-
func FindReadings(lastId, limit string) []*model.MorningReading {
18+
func FindReadings(lastId, limit string, rtype int) []*model.MorningReading {
1819
reading := model.NewMorningReading()
1920

20-
cond := ""
21+
cond := "rtype=?"
22+
args := make([]interface{}, 0, 2)
23+
args = append(args, rtype)
2124
if lastId != "0" {
22-
cond = " AND id<" + lastId
25+
cond += " AND id<?"
26+
args = append(args, lastId)
2327
}
2428

25-
readingList, err := reading.Where(cond).Order("id DESC").Limit(limit).
29+
readingList, err := reading.Where(cond, args...).Order("id DESC").Limit(limit).
2630
FindAll()
2731
if err != nil {
2832
logger.Errorln("reading service FindReadings Error:", err)
@@ -51,7 +55,37 @@ func IReading(id string) string {
5155
return "/readings"
5256
}
5357

54-
reading.Where("id=?", id).Increment("clicknum", 1)
58+
go reading.Where("id=?", id).Increment("clicknum", 1)
5559

56-
return reading.Url
60+
if reading.Inner == 0 {
61+
return "/wr?u=" + reading.Url
62+
}
63+
64+
return "/articles/" + strconv.Itoa(reading.Inner)
65+
}
66+
67+
// 获取晨读列表(分页)
68+
func FindReadingByPage(conds map[string]string, curPage, limit int) ([]*model.MorningReading, int) {
69+
conditions := make([]string, 0, len(conds))
70+
for k, v := range conds {
71+
conditions = append(conditions, k+"="+v)
72+
}
73+
74+
reading := model.NewMorningReading()
75+
76+
limitStr := strconv.Itoa((curPage-1)*limit) + "," + strconv.Itoa(limit)
77+
readingList, err := reading.Where(strings.Join(conditions, " AND ")).Order("id DESC").Limit(limitStr).
78+
FindAll()
79+
if err != nil {
80+
logger.Errorln("reading service FindArticleByPage Error:", err)
81+
return nil, 0
82+
}
83+
84+
total, err := reading.Count()
85+
if err != nil {
86+
logger.Errorln("reading service FindReadingByPage COUNT Error:", err)
87+
return nil, 0
88+
}
89+
90+
return readingList, total
5791
}

0 commit comments

Comments
 (0)