小调整
This commit is contained in:
parent
8b7edea000
commit
4f1a2f717e
58
README.md
58
README.md
@ -1,18 +1,62 @@
|
||||
## wp-go
|
||||
|
||||
一个go写的WordPress的前端,功能比较简单,只有列表页和详情页,rss2,主题只有twentyfifteen和twentyseventeen两套主题,插件的话只有一个简单的列表页的摘要生成和enlighter代码高亮。本身只用于展示文章,添加评论走的转发请求到php的WordPress。因为大量用了泛型功能,所以要求go的版本在1.19及以上,越新越好。。。。
|
||||
一个go写的WordPress的前端,功能比较简单,只有列表页和详情页,rss2,主题只有twentyfifteen和twentyseventeen两套主题,插件的话只有一个简单的列表页的摘要生成和enlighter代码高亮。本身只用于展示文章及评论。因为大量用了泛型功能,所以要求go的版本在1.19及以上,越新越好。。。
|
||||
|
||||
#### 特色功能
|
||||
|
||||
- 多种缓存配置
|
||||
- 基本实现全站缓存,并且可防止缓存击穿
|
||||
- 列表页也可以高亮语法格式化显示代码
|
||||
- 简易插件扩展开发机制、配置后支持热加载更新
|
||||
- 丰富繁杂的配置,呃,配置是有点儿多,虽然大部分都是可选项。。。
|
||||
- 添加评论或panic时发邮件通知,包涵栈调用和请求信息
|
||||
- 简单的流量限制中间件
|
||||
- 简单的流量限制中间件,可以限制全瞬时最大请求数量
|
||||
- 除配置文件外将所有静态资源都打包到执行文件中
|
||||
- 支持密码查看,且cookie信息可被php版所验证
|
||||
- 支持rss2订阅
|
||||
- 热更新配置、清空缓存
|
||||
- kill -SIGUSR1 PID 更新配置和清空缓存
|
||||
- kill -SIGUSR2 PID 清空缓存
|
||||
- 热更新配置、切换主题、清空缓存
|
||||
- kill -SIGUSR1 PID 更新配置和清空缓存
|
||||
- kill -SIGUSR2 PID 清空缓存
|
||||
|
||||
#### 数据显示支持程度
|
||||
|
||||
| 页表 | 支持程度 |
|
||||
|-----|--------------------------------------------|
|
||||
| 列表页 | 首页/搜索/归档/分类/标签/作者 分页列表 |
|
||||
| 详情页 | 显示内容、评论并可以添加评论(转发的php处理,需要配置php版的添加评论的url) |
|
||||
| 侧边栏 | 目前固定 近期文章、近期评论、规档、分类、条目/评论feed |
|
||||
|
||||
#### 后台设置支持程度
|
||||
|
||||
- 设置-
|
||||
- 常规
|
||||
- 站点标题
|
||||
- 副标题
|
||||
- 阅读
|
||||
- 博客页面至多显示数量
|
||||
- Feed中显示最近数量
|
||||
- 讨论
|
||||
- 其他评论设置-启用评论嵌套,最多嵌套层数
|
||||
- 在每个页面顶部显示 `新旧`评论
|
||||
|
||||
#### 主题支持程度
|
||||
|
||||
| twentyfifteen | twentyseventeen |
|
||||
|---------------|-----------------|
|
||||
| 站点身份 | 站点身份 |
|
||||
| 颜色 | 颜色 |
|
||||
| 页眉图片 | 页眉媒体 (暂不支持视频) |
|
||||
| 背景图片 | 额外css |
|
||||
| 额外css | |
|
||||
|
||||
#### 插件机制
|
||||
|
||||
分为对列表页文章数据的修改的插件和对影响整个程序表现的插件
|
||||
|
||||
| 列表页文章数据插件 | 整个程序表现的插件 |
|
||||
|----------------------|----------------|
|
||||
| passwordProject 密码保护 | enlighter 代码高亮 |
|
||||
| digest 自动生成指定长度的摘要 | |
|
||||
|
||||
#### 其它
|
||||
用的gin框架和sqlx,在外面封装了层查询的方法。后台可以设置的比较少,大部分设置还没打通。
|
||||
|
||||
用的gin框架和sqlx,在外面封装了层查询的方法。
|
@ -4,6 +4,7 @@ import (
|
||||
"github.com/fthvgb1/wp-go/helper/slice"
|
||||
str "github.com/fthvgb1/wp-go/helper/strings"
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/models"
|
||||
"github.com/fthvgb1/wp-go/internal/wpconfig"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/url"
|
||||
"strconv"
|
||||
@ -137,7 +138,11 @@ type CommonCommentFormat struct {
|
||||
}
|
||||
|
||||
func (c CommonCommentFormat) Sort(i, j *Comments) bool {
|
||||
return i.CommentDate.UnixNano() < j.CommentDate.UnixNano()
|
||||
order := wpconfig.GetOption("comment_order")
|
||||
if order == "asc" {
|
||||
return i.CommentDate.UnixNano() < j.CommentDate.UnixNano()
|
||||
}
|
||||
return i.CommentDate.UnixNano() > j.CommentDate.UnixNano()
|
||||
}
|
||||
|
||||
func (c CommonCommentFormat) FormatLi(ctx *gin.Context, m models.Comments, depth int, isTls bool, eo, parent string) string {
|
||||
|
@ -644,3 +644,54 @@ func Test_finds(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGets(t *testing.T) {
|
||||
type args struct {
|
||||
ctx context.Context
|
||||
q QueryCondition
|
||||
}
|
||||
type testCase[T Model] struct {
|
||||
name string
|
||||
args args
|
||||
want T
|
||||
wantErr bool
|
||||
}
|
||||
tests := []testCase[options]{
|
||||
{
|
||||
name: "t1",
|
||||
args: args{
|
||||
ctx: ctx,
|
||||
q: Conditions(Where(SqlBuilder{
|
||||
{"option_id", "11"},
|
||||
})),
|
||||
},
|
||||
want: options{
|
||||
OptionId: 11,
|
||||
OptionName: "comments_notify",
|
||||
OptionValue: "1",
|
||||
Autoload: "yes",
|
||||
},
|
||||
wantErr: false,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := Gets[options](tt.args.ctx, tt.args.q)
|
||||
gots, _ := gets[options](glob, tt.args.ctx, tt.args.q)
|
||||
gotss, _ := GetsFromDB[options](glob, tt.args.ctx, tt.args.q)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("Gets() error = %v, wantErr %v", err, tt.wantErr)
|
||||
return
|
||||
}
|
||||
if !reflect.DeepEqual(got, gots) {
|
||||
t.Errorf("Gets() got = %v, want %v", got, tt.want)
|
||||
}
|
||||
if !reflect.DeepEqual(got, gotss) {
|
||||
t.Errorf("Gets() got = %v, want %v", got, tt.want)
|
||||
}
|
||||
if !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("Gets() got = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user