修复默认页眉图片bug并优化代码

This commit is contained in:
xing 2023-02-05 00:07:10 +08:00
parent da236257cc
commit 285887d0e2
7 changed files with 113 additions and 102 deletions

1
go.mod
View File

@ -13,6 +13,7 @@ require (
github.com/jmoiron/sqlx v1.3.5
github.com/soxfmr/gomail v0.0.0-20200806033254-80bf84e583f0
golang.org/x/crypto v0.0.0-20220924013350-4ba4fb4dd9e7
golang.org/x/exp v0.0.0-20230203172020-98cc5a0785f9
gopkg.in/yaml.v2 v2.4.0
)

5
go.sum
View File

@ -31,8 +31,8 @@ github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGF
github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk=
github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
@ -92,6 +92,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220924013350-4ba4fb4dd9e7 h1:WJywXQVIb56P2kAvXeMGTIgQ1ZHQxR60+F9dLsodECc=
golang.org/x/crypto v0.0.0-20220924013350-4ba4fb4dd9e7/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20230203172020-98cc5a0785f9 h1:frX3nT9RkKybPnjyI+yvZh6ZucTZatCCEm9D47sZ2zo=
golang.org/x/exp v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU=
@ -111,7 +113,6 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=

View File

@ -4,19 +4,11 @@ package number
import (
"fmt"
"golang.org/x/exp/constraints"
"math/rand"
)
type IntNumber interface {
~int | ~int64 | ~int32 | ~int8 | ~int16 |
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64
}
type Number interface {
IntNumber | ~float64 | ~float32
}
func Range[T IntNumber](start, end, step T) []T {
func Range[T constraints.Integer](start, end, step T) []T {
if step == 0 {
panic("step can't be 0")
}
@ -36,12 +28,12 @@ func Range[T IntNumber](start, end, step T) []T {
}
// Rand 都为闭区间 [start,end]
func Rand[T IntNumber](start, end T) T {
func Rand[T constraints.Integer](start, end T) T {
end++
return T(rand.Int63n(int64(end-start))) + start
}
func Min[T Number](a ...T) T {
func Min[T constraints.Integer | constraints.Float](a ...T) T {
min := a[0]
for _, t := range a {
if min > t {
@ -51,7 +43,7 @@ func Min[T Number](a ...T) T {
return min
}
func Max[T Number](a ...T) T {
func Max[T constraints.Integer | constraints.Float](a ...T) T {
max := a[0]
for _, t := range a {
if max < t {
@ -61,7 +53,7 @@ func Max[T Number](a ...T) T {
return max
}
func Sum[T Number](a ...T) T {
func Sum[T constraints.Integer | constraints.Float](a ...T) T {
s := T(0)
for _, t := range a {
s += t
@ -69,28 +61,28 @@ func Sum[T Number](a ...T) T {
return s
}
func Add[T Number](i, j T) T {
func Add[T constraints.Integer | constraints.Float](i, j T) T {
return i + j
}
func Sub[T Number](i, j T) T {
func Sub[T constraints.Integer | constraints.Float](i, j T) T {
return i - j
}
func ToString[T Number](n T) string {
func ToString[T constraints.Integer | constraints.Float](n T) string {
return fmt.Sprintf("%v", n)
}
func Abs[T Number](n T) T {
func Abs[T constraints.Integer | constraints.Float](n T) T {
if n >= 0 {
return n
}
return -n
}
func Mul[T Number](i, j T) T {
func Mul[T constraints.Integer | constraints.Float](i, j T) T {
return i * j
}
func Divide[T Number](i, j T) T {
func Divide[T constraints.Integer | constraints.Float](i, j T) T {
return i / j
}

View File

@ -23,7 +23,7 @@ func getHeaderImages(a ...any) (r []models.PostThumbnail, err error) {
mods, ok := wpconfig.Options.Load(fmt.Sprintf("theme_mods_%s", theme))
if ok && mods != "" {
meta, er := plugins.UnPHPSerialize[plugins.HeaderImageMeta](mods)
if er != nil {
if er != nil || meta.HeaderImage == "" {
err = er
return
}

View File

@ -28,13 +28,15 @@
</h1>
<p class="site-description">{{"blogdescription"| getOption}}</p>
</div><!-- .site-branding-text -->
{{if eq .scene 1}}
<a href="#content" class="menu-scroll-down">
<svg class="icon icon-arrow-right" aria-hidden="true" role="img">
<use href="#icon-arrow-right" xlink:href="#icon-arrow-right"></use>
</svg>
<span class="screen-reader-text">向下滚动到内容</span>
</a>
{{end}}
</div><!-- .wrap -->
</div><!-- .site-branding -->

View File

@ -8,7 +8,6 @@ import (
"github.com/fthvgb1/wp-go/internal/pkg/logs"
"github.com/fthvgb1/wp-go/internal/pkg/models"
"github.com/fthvgb1/wp-go/internal/plugins"
"github.com/fthvgb1/wp-go/internal/wpconfig"
"github.com/fthvgb1/wp-go/plugin/pagination"
"github.com/gin-gonic/gin"
"strings"
@ -26,53 +25,54 @@ var paginate = func() plugins.PageEle {
return p
}()
func Hook(status int, c *gin.Context, h gin.H, scene, stats int) {
templ := "twentyseventeen/posts/index.gohtml"
h["HeaderImage"] = getHeaderImage(c)
if stats == plugins.Empty404 {
c.HTML(status, templ, h)
type handle struct {
c *gin.Context
ginH gin.H
scene int
status int
stats int
templ string
}
func Hook(status int, c *gin.Context, ginH gin.H, scene, stats int) {
h := handle{
c: c,
ginH: ginH,
scene: scene,
status: status,
stats: stats,
templ: "twentyseventeen/posts/index.gohtml",
}
if _, ok := plugins.IndexSceneMap[scene]; ok {
posts := h["posts"].([]models.Posts)
p, ok := h["pagination"]
ginH["HeaderImage"] = h.getHeaderImage(c)
if stats == plugins.Empty404 {
c.HTML(status, h.templ, ginH)
return
}
if scene == plugins.Detail {
h.detail()
return
}
h.index()
}
func (h handle) index() {
posts := h.ginH["posts"].([]models.Posts)
p, ok := h.ginH["pagination"]
if ok {
pp, ok := p.(pagination.ParsePagination)
if ok {
h["pagination"] = pagination.Paginate(paginate, pp)
h.ginH["pagination"] = pagination.Paginate(paginate, pp)
}
}
d := 0
s := ""
if scene == plugins.Search {
if len(posts) > 0 {
d = 1
} else {
d = 0
}
} else if scene == plugins.Category {
cat := c.Param("category")
_, cate := slice.SearchFirst(cache.Categories(c), func(my models.TermsMy) bool {
return my.Name == cat
})
d = int(cate.Terms.TermId)
if cate.Slug[0] != '%' {
s = cate.Slug
}
} else if scene == plugins.Tag {
cat := c.Param("tag")
_, cate := slice.SearchFirst(cache.Tags(c), func(my models.TermsMy) bool {
return my.Name == cat
})
d = int(cate.Terms.TermId)
if cate.Slug[0] != '%' {
s = cate.Slug
}
}
h["bodyClass"] = bodyClass(scene, d, s)
h["posts"] = postThumbnail(posts, scene)
} else if scene == plugins.Detail {
post := h["post"].(models.Posts)
h["bodyClass"] = bodyClass(scene, int(post.Id))
h.ginH["bodyClass"] = h.bodyClass()
h.ginH["posts"] = h.postThumbnail(posts, h.scene)
h.c.HTML(h.status, h.templ, h.ginH)
}
func (h handle) detail() {
post := h.ginH["post"].(models.Posts)
h.ginH["bodyClass"] = h.bodyClass()
//host, _ := wpconfig.Options.Load("siteurl")
host := ""
img := plugins.Thumbnail(post.Thumbnail.OriginAttachmentData, "thumbnail", host, "thumbnail", "post-thumbnail")
@ -81,14 +81,12 @@ func Hook(status int, c *gin.Context, h gin.H, scene, stats int) {
img.Sizes = "100vw"
img.Srcset = fmt.Sprintf("%s %dw, %s", img.Path, img.Width, img.Srcset)
post.Thumbnail = img
h["post"] = post
comments := h["comments"].([]models.Comments)
dep := h["maxDep"].(int)
h["comments"] = plugins.FormatComments(c, comment{}, comments, dep)
templ = "twentyseventeen/posts/detail.gohtml"
}
c.HTML(status, templ, h)
return
h.ginH["post"] = post
comments := h.ginH["comments"].([]models.Comments)
dep := h.ginH["maxDep"].(int)
h.ginH["comments"] = plugins.FormatComments(h.c, comment{}, comments, dep)
h.templ = "twentyseventeen/posts/detail.gohtml"
h.c.HTML(h.status, h.templ, h.ginH)
}
type comment struct {
@ -109,7 +107,7 @@ func (c comment) FormatLi(ctx *gin.Context, m models.Comments, depth int, isTls
return plugins.FormatLi(templ, ctx, m, depth, isTls, eo, parent)
}
func postThumbnail(posts []models.Posts, scene int) []models.Posts {
func (h handle) postThumbnail(posts []models.Posts, scene int) []models.Posts {
return slice.Map(posts, func(t models.Posts) models.Posts {
if t.Thumbnail.Path != "" {
if slice.IsContained(scene, []int{plugins.Home, plugins.Archive, plugins.Search}) {
@ -122,33 +120,50 @@ func postThumbnail(posts []models.Posts, scene int) []models.Posts {
})
}
func getHeaderImage(c *gin.Context) (r models.PostThumbnail) {
func (h handle) getHeaderImage(c *gin.Context) (r models.PostThumbnail) {
r.Path = "/wp-content/themes/twentyseventeen/assets/images/header.jpg"
r.Width = 2000
r.Height = 1200
t, _ := wpconfig.Options.Load("template")
hs, err := cache.GetHeaderImages(c, t)
hs, err := cache.GetHeaderImages(c, ThemeName)
if err != nil {
logs.ErrPrintln(err, "获取页眉背景图失败")
} else if len(hs) > 0 && err == nil {
_, r = slice.Rand(hs)
}
r.Sizes = "100vw"
return
}
func bodyClass(scene, d int, a ...any) string {
func (h handle) bodyClass() string {
s := ""
if scene == plugins.Search {
if d > 0 {
switch h.scene {
case plugins.Search:
if len(h.ginH["posts"].([]models.Posts)) > 0 {
s = "search-results"
} else {
s = "search-no-results"
}
} else if scene == plugins.Category || scene == plugins.Tag {
s = fmt.Sprintf("category-%d %v", d, a[0])
} else if scene == plugins.Detail {
s = fmt.Sprintf("postid-%d", d)
case plugins.Category:
cat := h.c.Param("category")
_, cate := slice.SearchFirst(cache.Categories(h.c), func(my models.TermsMy) bool {
return my.Name == cat
})
if cate.Slug[0] != '%' {
s = cate.Slug
}
s = fmt.Sprintf("category-%d %v", cate.Terms.TermId, s)
case plugins.Tag:
cat := h.c.Param("tag")
_, cate := slice.SearchFirst(cache.Tags(h.c), func(my models.TermsMy) bool {
return my.Name == cat
})
if cate.Slug[0] != '%' {
s = cate.Slug
}
s = fmt.Sprintf("category-%d %v", cate.Terms.TermId, s)
case plugins.Detail:
s = fmt.Sprintf("postid-%d", h.ginH["post"].(models.Posts).Id)
}
return map[int]string{
plugins.Home: "home blog ",
@ -157,5 +172,5 @@ func bodyClass(scene, d int, a ...any) string {
plugins.Tag: str.Join("archive category page-two-column ", s),
plugins.Search: str.Join("search ", s),
plugins.Detail: str.Join("post-template-default single single-post single-format-standard ", s),
}[scene]
}[h.scene]
}

View File

@ -3,7 +3,7 @@ package model
import (
"context"
"fmt"
"github.com/fthvgb1/wp-go/helper/number"
"golang.org/x/exp/constraints"
"math/rand"
"strings"
"time"
@ -87,7 +87,7 @@ func SimplePagination[T Model](ctx context.Context, where ParseWhere, fields, gr
return
}
func FindOneById[T Model, I number.IntNumber](ctx context.Context, id I) (T, error) {
func FindOneById[T Model, I constraints.Integer](ctx context.Context, id I) (T, error) {
var r T
sq := fmt.Sprintf("select * from `%s` where `%s`=?", r.Table(), r.PrimaryKey())
err := globalBb.Get(ctx, &r, sq, id)