-
Notifications
You must be signed in to change notification settings - Fork 0
/
t_tag.go
executable file
·140 lines (126 loc) · 3.24 KB
/
t_tag.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package models
import (
"blog/app/support"
"errors"
"fmt"
"strings"
"github.com/revel/revel"
)
//BloggerTag model
// 标签表
type Tag struct {
Id int64 `xorm:"not null pk autoincr INT(11)" json:"id"`
Type int `xorm:"not null INT(11)"`
Name string `xorm:"not null VARCHAR(20)" json:"name"`
Parent int64 `xorm:"default 0 INT(11)"`
Ident string `xorm:"VARCHAR(255)" json:"ident"`
}
// 标签关联表
type BlogTag struct {
Id int64 `xorm:"not null pk autoincr INT(11)"`
Blogid int64 `xorm:"INT(11)"`
Tagid int64 `xorm:"INT(11)"`
}
// Query all tag
// 查找所有 tag
func (b *Tag) ListAll() ([]Tag, error) {
bt := make([]Tag, 0)
err := support.Xorm.Find(&bt)
return bt, err
}
// 根据 id 获取标签
func (b *Tag) GetByID(id int64) (*Tag, error) {
tag := new(Tag)
has, err := support.Xorm.Id(id).Get(tag)
if has {
return tag, nil
}
return nil, err
}
// 根据 ident 获取标签
func (b *Tag) GetByIdent(ident string) (*Tag, error) {
tag := &Tag{}
has, err := support.Xorm.Where("ident = ?", ident).Get(tag)
if has {
return tag, nil
}
return nil, err
}
// FindBlogCount to get count of blog related to this tag
// 查询标签关联的文章数目
func (t *Tag) FindBlogByTag(ident string) []Blog {
var id int64
if len(ident) > 0 {
tag, err := t.GetByIdent(ident)
if err != nil {
id = tag.Id
}
} else {
id = t.Id
}
sql := "SELECT b.* FROM " + TABLE_BLOG + " AS b, " + TABLE_TAG + " AS t, " + TABLE_BLOG_TAG + " AS bt WHERE b.id = bt.blogid AND t.id = bt.tagid AND t.id = " + fmt.Sprintf("%d", id)
blogs := make([]Blog, 0)
support.Xorm.Sql(sql).Find(&blogs)
return blogs
}
// QueryTags to Search for tag
// 根据用户输入的单词匹配 tag
func (t *Tag) QueryTags(str string) ([]map[string][]byte, error) {
sql := "SELECT name,id FROM t_tag WHERE name LIKE \"%" + str + "%\" ORDER BY LENGTH(name)-LENGTH(\"" + str + "\") ASC LIMIT 10"
//sql := "SELECT name FROM t_tag"
ress, err := support.Xorm.Query(sql)
revel.TRACE.Println("res: ", ress)
if err != nil {
revel.ERROR.Println("err: ", err)
return ress, err
}
return ress, nil
}
// 根据名字创建一个标签
func (b *Tag) NewTagByName(name string) (int64, error) {
tag := new(Tag)
tag.Name = name
tag.Parent = 0
tag.Type = 0
temp := strings.Replace(name, " ", "_", -1)
tag.Ident = temp
return tag.New()
}
// New to Add a new tag
// 新增一个标签
func (b *Tag) New() (int64, error) {
if b.Name != "" && b.Ident != "" {
bt := new(Tag)
bt.Type = b.Type
bt.Name = b.Name
bt.Ident = b.Ident
bt.Parent = b.Parent
_, err := support.Xorm.InsertOne(bt)
if err != nil {
return -1, err
}
return bt.Id, nil
}
return -1, errors.New("必须填写标签名和标签标识")
}
// 更新标签
func (t *Tag) Update() bool {
if t.Id <= 0 {
return false
}
support.Xorm.Id(t.Id).Update(t)
return true
}
// 删除标签
func (t *Tag) Delete(ids []string) {
revel.TRACE.Println("tags", ids)
idStr := strings.Join(ids, ",")
sql := "DELETE FROM " + TABLE_TAG + " WHERE id in (" + idStr + ")"
sql2 := "DELET FROM " + TABLE_BLOG_TAG + " WHERE tagid in(" + idStr + ")"
support.Xorm.Exec(sql)
support.Xorm.Exec(sql2)
}
func (bt *BlogTag) AddTagRef(tagid, blogid int64) {
btr := &BlogTag{Blogid: blogid, Tagid: tagid}
support.Xorm.Insert(btr)
}