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

Skip to content

Commit c0565b7

Browse files
committed
后台手动添加文章
1 parent 07663f0 commit c0565b7

File tree

4 files changed

+182
-1
lines changed

4 files changed

+182
-1
lines changed

data/programming.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
微服务 3 n
1717
切片 3 n
1818
测试 3 n
19+
机器学习 3 n
20+
人工智能 3 n
21+
深度学习 3 n
22+
大数据 3 n
23+
云计算 3 n
1924
microservice 3 n
2025
slice 3 n
2126
goroutine 3 n

src/http/controller/admin/article.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func (self ArticleController) RegisterRoute(g *echo.Group) {
2323
g.GET("/crawl/article/list", self.ArticleList)
2424
g.POST("/crawl/article/query.html", self.ArticleQuery)
2525
g.Match([]string{"GET", "POST"}, "/crawl/article/new", self.CrawlArticle)
26+
g.Match([]string{"GET", "POST"}, "/crawl/article/publish", self.Publish)
2627
g.Match([]string{"GET", "POST"}, "/crawl/article/modify", self.Modify)
2728
}
2829

@@ -107,6 +108,25 @@ func (ArticleController) CrawlArticle(ctx echo.Context) error {
107108
return render(ctx, "article/new.html", data)
108109
}
109110

111+
// Publish
112+
func (self ArticleController) Publish(ctx echo.Context) error {
113+
var data = make(map[string]interface{})
114+
115+
if ctx.FormValue("submit") == "1" {
116+
user := ctx.Get("user").(*model.Me)
117+
err := logic.DefaultArticle.PublishFromAdmin(ctx, user, ctx.FormParams())
118+
if err != nil {
119+
return fail(ctx, 1, err.Error())
120+
}
121+
return success(ctx, nil)
122+
}
123+
124+
data["statusSlice"] = model.ArticleStatusSlice
125+
data["langSlice"] = model.LangSlice
126+
127+
return render(ctx, "article/publish.html", data)
128+
}
129+
110130
// Modify
111131
func (self ArticleController) Modify(ctx echo.Context) error {
112132
var data = make(map[string]interface{})
@@ -129,7 +149,6 @@ func (self ArticleController) Modify(ctx echo.Context) error {
129149
data["langSlice"] = model.LangSlice
130150

131151
return render(ctx, "article/modify.html", data)
132-
133152
}
134153

135154
// /crawl/article/del

src/logic/article.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,39 @@ func (self ArticleLogic) Publish(ctx context.Context, me *model.Me, form url.Val
259259
return nil
260260
}
261261

262+
func (self ArticleLogic) PublishFromAdmin(ctx context.Context, me *model.Me, form url.Values) error {
263+
objLog := GetLogger(ctx)
264+
265+
articleUrl := form.Get("url")
266+
netUrl, err := url.Parse(articleUrl)
267+
if err != nil {
268+
objLog.Errorln("url is illegal:", netUrl)
269+
return err
270+
}
271+
272+
article := &model.Article{
273+
Domain: netUrl.Host,
274+
Name: form.Get("name"),
275+
Url: articleUrl,
276+
Author: form.Get("author"),
277+
AuthorTxt: form.Get("author"),
278+
Title: form.Get("title"),
279+
Content: form.Get("content"),
280+
Txt: form.Get("txt"),
281+
PubDate: form.Get("pub_date"),
282+
Lang: goutils.MustInt(form.Get("lang")),
283+
Cover: form.Get("cover"),
284+
}
285+
286+
_, err = MasterDB.Insert(article)
287+
if err != nil {
288+
objLog.Errorln("insert article error:", err)
289+
return err
290+
}
291+
292+
return nil
293+
}
294+
262295
func (ArticleLogic) cleanUrl(articleUrl string, auto bool) string {
263296
pos := strings.LastIndex(articleUrl, "#")
264297
if pos > 0 {

template/admin/article/publish.html

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
{{define "content"}}
2+
<div class="pageheader notab">
3+
<h1 class="pagetitle">发布文章</h1>
4+
</div><!--pageheader-->
5+
6+
<div id="contentwraapper" class="contentwrapper">
7+
<div id="tooltip" class="red"></div>
8+
<form method="POST" action="/admin/crawl/article/publish" class="stdform_q">
9+
<div class="contenttitle2">
10+
<h3>基本信息</h3>
11+
</div>
12+
<div>
13+
<p>
14+
<label for="title">标题</label>
15+
<span class="field">
16+
<input id="title" type="text" name="title" class="mediuminput required" value="" />
17+
</span>
18+
</p>
19+
</div>
20+
<div>
21+
<p>
22+
<label for="url">文章原始链接</label>
23+
<span class="field">
24+
<input id="url" type="text" name="url" class="mediuminput required {url:true}" value="" />
25+
</span>
26+
</p>
27+
</div>
28+
<div>
29+
<p>
30+
<label for="name">网站名称</label>
31+
<span class="field">
32+
<input id="name" type="text" name="name" class="mediuminput required" value="" />
33+
</span>
34+
</p>
35+
</div>
36+
<div>
37+
<p>
38+
<label>内容</label>
39+
<span class="field">
40+
<textarea name="content" rows="25" cols="144"></textarea>
41+
</span>
42+
</p>
43+
</div>
44+
<div>
45+
<p>
46+
<label>纯文本</label>
47+
<span class="field">
48+
<textarea name="txt" rows="25" cols="144"></textarea>
49+
</span>
50+
</p>
51+
</div>
52+
<div>
53+
<p>
54+
<label for="author">作者</label>
55+
<span class="field">
56+
<input id="author" type="text" name="author" class="smallinput required" value="{{.article.Author}}" />
57+
</span>
58+
</p>
59+
</div>
60+
<div>
61+
<p>
62+
<label for="pub_date">发布时间</label>
63+
<span class="field">
64+
<input id="pub_date" type="text" name="pub_date" class="smallinput required" value="" />
65+
</span>
66+
</p>
67+
<p>
68+
<label>语言</label>
69+
<span class="field">
70+
<select name="lang" class="uniformselect">
71+
{{range $i, $v := .langSlice}}
72+
<option value="{{$i}}">{{$v}}</option>
73+
{{end}}
74+
</select>
75+
</span>
76+
</p>
77+
</div>
78+
<div style="border:1px dashed;">
79+
<p>
80+
<label>推荐封面</label>
81+
<span class="upload_img_single"></span>
82+
</p>
83+
<p>
84+
<span class="field">
85+
<input type="text" name="cover" class="mediuminput img_url {url:true}" value=""/>
86+
</span>
87+
</p>
88+
<p>
89+
<span class="field">
90+
<a class="show_img" href="" target="_blank"><img class="show_img" src="" width="100" height="100"/></a>
91+
</span>
92+
</p>
93+
</div>
94+
<div class="contenttitle2">
95+
<h3>操作</h3>
96+
</div>
97+
<div>
98+
<p>
99+
<label>&nbsp;</label>
100+
<input type="submit" class="submit radius2" value="提交" />
101+
</p>
102+
</div>
103+
</form>
104+
<img id="loaders" src="/static/img/loaders/loader7.gif" alt="" class="hide">
105+
<div id="toast"></div>
106+
<br/>
107+
<br/>
108+
</div><!--contentwrapper-->
109+
{{end}}
110+
111+
{{define "css"}}
112+
<link href="/static/css/jquery.cftoaster.1.0.1.css" media="screen" rel="stylesheet" type="text/css">
113+
<link href="/static/css/Huploadify.css" media="screen" rel="stylesheet" type="text/css">
114+
{{end}}
115+
116+
{{define "js"}}
117+
<script type="text/javascript" src="/static/js/libs/jquery.validate.min.js"></script>
118+
<script type="text/javascript" src="/static/js/libs/jquery.metadata.js"></script>
119+
<script type="text/javascript" src="/static/js/libs/jquery.validate.msg.cn.js"></script>
120+
<script type="text/javascript" src="/static/js/libs/jquery.cftoaster.1.0.1.js"></script>
121+
<script type="text/javascript" src="/static/js/libs/jquery.Huploadify.js"></script>
122+
<script type="text/javascript" src="/static/js/admin/forms.js"></script>
123+
<script type="text/javascript" src="/static/js/upload.js?v=1.0"></script>
124+
{{end}}

0 commit comments

Comments
 (0)