小调整

This commit is contained in:
xing 2023-03-06 00:25:17 +08:00
parent 8b7edea000
commit 4f1a2f717e
3 changed files with 108 additions and 8 deletions

View File

@ -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,在外面封装了层查询的方法。

View File

@ -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 {

View File

@ -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)
}
})
}
}