Files
ppgo_job/boot/tplfunc.go
T
lmk 610b85e3a5 refactor: 从 Beego 迁移到 GoFrame v2
- 替换 Beego 框架为 GoFrame v2
- 重构项目结构: controller/service/dao/middleware 分层
- 替换自定义 crons 包为 gcron
- 模板从 views/ 迁移到 resource/template/
- 配置从 conf/app.conf 迁移到 config.yml
- 数据库从 MySQL 切换为 SQLite (modernc.org/sqlite)
- 移除 agent/ 远程执行器(待后续迁移)
- 移除 crons/ 自定义定时器包
- 静态资源整理到 resource/static/
2026-07-09 11:06:12 +08:00

130 lines
2.8 KiB
Go

package boot
import (
"fmt"
"net/url"
"strings"
"time"
"github.com/gogf/gf/v2/os/gview"
"github.com/gogf/gf/v2/util/gconv"
)
func init() {
view := gview.Instance()
if err := view.SetConfigWithMap(map[string]interface{}{
"Paths": []string{"resource/template"},
}); err != nil {
// fallback - gview may not support SetConfigWithMap on singleton
}
// urlfor 生成路由URL
view.BindFunc("urlfor", func(name string, params ...string) string {
route, ok := RouteMap[name]
if !ok {
return "#"
}
if len(params) >= 2 {
route = route + "?" + url.QueryEscape(params[0]) + "=" + url.QueryEscape(params[1])
}
return route
})
// date 日期格式化(兼容多种格式)
view.BindFunc("date", func(t interface{}, format string) string {
var tm time.Time
switch v := t.(type) {
case time.Time:
tm = v
case int64:
tm = time.Unix(v, 0)
case int:
tm = time.Unix(int64(v), 0)
case string:
// 尝试解析时间戳字符串
if i := gconv.Int64(v); i > 0 {
tm = time.Unix(i, 0)
} else {
return v
}
default:
return fmt.Sprintf("%v", t)
}
switch format {
case "Y-m-d H:i:s":
return tm.Format("2006-01-02 15:04:05")
case "Y-m-d":
return tm.Format("2006-01-02")
case "H:i:s":
return tm.Format("15:04:05")
case "m-d":
return tm.Format("01-02")
default:
return tm.Format(format)
}
})
// dateStr 时间戳转日期字符串
view.BindFunc("dateStr", func(timestamp int64, format string) string {
t := time.Unix(timestamp, 0)
switch format {
case "Y-m-d H:i:s":
return t.Format("2006-01-02 15:04:05")
case "Y-m-d":
return t.Format("2006-01-02")
default:
return t.Format(format)
}
})
// substr 字符串截取
view.BindFunc("substr", func(s string, start, length int) string {
runes := []rune(s)
if start >= len(runes) {
return ""
}
end := start + length
if end > len(runes) {
end = len(runes)
}
return string(runes[start:end])
})
// str2html 将值渲染为HTML(支持任意类型)
view.BindFunc("str2html", func(s interface{}) string {
return fmt.Sprintf("%v", s)
})
// eq 判断相等
view.BindFunc("eq", func(a, b interface{}) bool {
return fmt.Sprintf("%v", a) == fmt.Sprintf("%v", b)
})
// ne 判断不等
view.BindFunc("ne", func(a, b interface{}) bool {
return fmt.Sprintf("%v", a) != fmt.Sprintf("%v", b)
})
// inArray 检查值是否在数组中
view.BindFunc("inArray", func(value interface{}, arr []interface{}) bool {
for _, v := range arr {
if fmt.Sprintf("%v", v) == fmt.Sprintf("%v", value) {
return true
}
}
return false
})
// replace 字符串替换
view.BindFunc("replace", func(s, old, new string) string {
return strings.Replace(s, old, new, -1)
})
view.BindFunc("split", func(s string) []string {
if s == "" {
return []string{}
}
return strings.Split(s, ",")
})
}