详情页及其它调整修复bug
This commit is contained in:
parent
b836868bc5
commit
d47e4920ac
|
@ -48,3 +48,10 @@ func AnyAnyToStrAny(m map[any]any) (r map[string]any) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Reduce[T, V any, K comparable](m map[K]V, fn func(K, V, T) T, r T) T {
|
||||||
|
for k, v := range m {
|
||||||
|
r = fn(k, v, r)
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
|
@ -108,6 +108,7 @@ func Detail(c *gin.Context) {
|
||||||
ginH["comments"] = hh.formatComment(commentss, 1, d)
|
ginH["comments"] = hh.formatComment(commentss, 1, d)
|
||||||
ginH["next"] = next
|
ginH["next"] = next
|
||||||
ginH["user"] = user
|
ginH["user"] = user
|
||||||
|
ginH["scene"] = plugins.Detail
|
||||||
}
|
}
|
||||||
|
|
||||||
type Comment struct {
|
type Comment struct {
|
||||||
|
|
|
@ -312,5 +312,6 @@ func Index(c *gin.Context) {
|
||||||
ginH["totalPage"] = h.getTotalPage(totalRaw)
|
ginH["totalPage"] = h.getTotalPage(totalRaw)
|
||||||
ginH["currentPage"] = h.page
|
ginH["currentPage"] = h.page
|
||||||
ginH["title"] = h.getTitle()
|
ginH["title"] = h.getTitle()
|
||||||
|
ginH["scene"] = h.scene
|
||||||
ginH["pagination"] = pagination.NewParsePagination(totalRaw, h.pageSize, h.page, h.paginationStep, q, c.Request.URL.Path)
|
ginH["pagination"] = pagination.NewParsePagination(totalRaw, h.pageSize, h.page, h.paginationStep, q, c.Request.URL.Path)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,14 +2,12 @@ package dao
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"github.com/fthvgb1/wp-go/helper/maps"
|
|
||||||
"github.com/fthvgb1/wp-go/helper/slice"
|
"github.com/fthvgb1/wp-go/helper/slice"
|
||||||
"github.com/fthvgb1/wp-go/internal/pkg/logs"
|
"github.com/fthvgb1/wp-go/internal/pkg/logs"
|
||||||
"github.com/fthvgb1/wp-go/internal/pkg/models"
|
"github.com/fthvgb1/wp-go/internal/pkg/models"
|
||||||
|
"github.com/fthvgb1/wp-go/internal/plugins"
|
||||||
"github.com/fthvgb1/wp-go/model"
|
"github.com/fthvgb1/wp-go/model"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetPostMetaByPostIds(args ...any) (r map[uint64]map[string]any, err error) {
|
func GetPostMetaByPostIds(args ...any) (r map[uint64]map[string]any, err error) {
|
||||||
|
@ -64,35 +62,9 @@ func ToPostThumb(c context.Context, meta map[string]any, host string) (r models.
|
||||||
if ok {
|
if ok {
|
||||||
metadata, ok := x.(models.WpAttachmentMetadata)
|
metadata, ok := x.(models.WpAttachmentMetadata)
|
||||||
if ok {
|
if ok {
|
||||||
r = thumbnail(metadata, "post-thumbnail", host)
|
r = plugins.Thumbnail(metadata, "post-thumbnail", host, "thumbnail")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func thumbnail(metadata models.WpAttachmentMetadata, thumbType, host string) (r models.PostThumbnail) {
|
|
||||||
if _, ok := metadata.Sizes[thumbType]; ok {
|
|
||||||
r.Path = fmt.Sprintf("%s/wp-content/uploads/%s", host, metadata.File)
|
|
||||||
r.Width = metadata.Sizes[thumbType].Width
|
|
||||||
r.Height = metadata.Sizes[thumbType].Height
|
|
||||||
up := strings.Split(metadata.File, "/")
|
|
||||||
r.Srcset = strings.Join(maps.FilterToSlice[string](metadata.Sizes, func(s string, size models.MetaDataFileSize) (r string, ok bool) {
|
|
||||||
up[2] = size.File
|
|
||||||
if s == "post-thumbnail" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
r = fmt.Sprintf("%s/wp-content/uploads/%s %dw", host, strings.Join(up, "/"), size.Width)
|
|
||||||
ok = true
|
|
||||||
return
|
|
||||||
}), ", ")
|
|
||||||
r.Sizes = fmt.Sprintf("(max-width: %dpx) 100vw, %dpx", r.Width, r.Width)
|
|
||||||
if r.Width >= 740 && r.Width < 767 {
|
|
||||||
r.Sizes = "(max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px"
|
|
||||||
} else if r.Width >= 767 {
|
|
||||||
r.Sizes = "(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px"
|
|
||||||
}
|
|
||||||
r.OriginAttachmentData = metadata
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/fthvgb1/wp-go/helper/slice"
|
"github.com/fthvgb1/wp-go/helper/slice"
|
||||||
"github.com/fthvgb1/wp-go/internal/pkg/models"
|
"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/internal/wpconfig"
|
||||||
"github.com/fthvgb1/wp-go/model"
|
"github.com/fthvgb1/wp-go/model"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -68,7 +69,7 @@ func GetPostsByIds(ids ...any) (m map[uint64]models.Posts, err error) {
|
||||||
pp.Thumbnail = thumb
|
pp.Thumbnail = thumb
|
||||||
}
|
}
|
||||||
} else if pp.PostType == "attachment" && pp.AttachmentMetadata.File != "" {
|
} else if pp.PostType == "attachment" && pp.AttachmentMetadata.File != "" {
|
||||||
thumb := thumbnail(pp.AttachmentMetadata, "thumbnail", host)
|
thumb := plugins.Thumbnail(pp.AttachmentMetadata, "thumbnail", host, "thumbnail", "post-thumbnail")
|
||||||
if thumb.Path != "" {
|
if thumb.Path != "" {
|
||||||
pp.Thumbnail = thumb
|
pp.Thumbnail = thumb
|
||||||
}
|
}
|
||||||
|
|
36
internal/plugins/thumbnail.go
Normal file
36
internal/plugins/thumbnail.go
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
package plugins
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/fthvgb1/wp-go/helper/maps"
|
||||||
|
"github.com/fthvgb1/wp-go/internal/pkg/models"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Thumbnail(metadata models.WpAttachmentMetadata, Type, host string, except ...string) (r models.PostThumbnail) {
|
||||||
|
if _, ok := metadata.Sizes[Type]; ok {
|
||||||
|
r.Path = fmt.Sprintf("%s/wp-content/uploads/%s", host, metadata.File)
|
||||||
|
r.Width = metadata.Sizes[Type].Width
|
||||||
|
r.Height = metadata.Sizes[Type].Height
|
||||||
|
up := strings.Split(metadata.File, "/")
|
||||||
|
r.Srcset = strings.Join(maps.FilterToSlice[string](metadata.Sizes, func(s string, size models.MetaDataFileSize) (r string, ok bool) {
|
||||||
|
up[2] = size.File
|
||||||
|
for _, s2 := range except {
|
||||||
|
if s == s2 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r = fmt.Sprintf("%s/wp-content/uploads/%s %dw", host, strings.Join(up, "/"), size.Width)
|
||||||
|
ok = true
|
||||||
|
return
|
||||||
|
}), ", ")
|
||||||
|
r.Sizes = fmt.Sprintf("(max-width: %dpx) 100vw, %dpx", r.Width, r.Width)
|
||||||
|
if r.Width >= 740 && r.Width < 767 {
|
||||||
|
r.Sizes = "(max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px"
|
||||||
|
} else if r.Width >= 767 {
|
||||||
|
r.Sizes = "(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px"
|
||||||
|
}
|
||||||
|
r.OriginAttachmentData = metadata
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
{{block "head" .}}
|
{{block "head" .}}
|
||||||
{{end}}
|
{{end}}
|
||||||
</head>
|
</head>
|
||||||
<body class="home blog wp-embed-responsive hfeed has-header-image has-sidebar colors-light">
|
<body class="{{.bodyClass}} wp-embed-responsive hfeed has-header-image has-sidebar colors-light">
|
||||||
{{template "svg"}}
|
{{template "svg"}}
|
||||||
<div id="page" class="site">
|
<div id="page" class="site">
|
||||||
<a class="skip-link screen-reader-text" href="#content">跳至内容</a>
|
<a class="skip-link screen-reader-text" href="#content">跳至内容</a>
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
<div class="custom-header" style="margin-bottom: 0px;">
|
<div class="custom-header" style="margin-bottom: 0px;">
|
||||||
<div class="custom-header-media">
|
<div class="custom-header-media">
|
||||||
<div id="wp-custom-header" class="wp-custom-header">
|
<div id="wp-custom-header" class="wp-custom-header">
|
||||||
<img src="{{.HeaderImage.Path}}" width="{{.HeaderImage.Width}}" height="{{.HeaderImage.Height}}" alt="" {{if .HeaderImage.Srcset}}srcset="{{.HeaderImage.Srcset}}" {{end}} {{if .HeaderImage.Sizes}}sizes="{{.HeaderImage.Srcset}}" {{end}}>
|
<img src="{{.HeaderImage.Path}}" width="{{.HeaderImage.Width}}" height="{{.HeaderImage.Height}}" alt="" {{if .HeaderImage.Srcset}}srcset="{{.HeaderImage.Srcset}}" {{end}} {{if .HeaderImage.Sizes}}sizes="{{.HeaderImage.Sizes}}" {{end}}>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -44,12 +44,9 @@
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|
||||||
<div class="site-content-contain">
|
|
||||||
<div id="content" class="site-content">
|
|
||||||
{{block "content" .}}
|
{{block "content" .}}
|
||||||
|
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer id="colophon" class="site-footer">
|
<footer id="colophon" class="site-footer">
|
||||||
<div class="wrap">
|
<div class="wrap">
|
||||||
|
@ -58,7 +55,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -161,4 +161,7 @@
|
||||||
</symbol>
|
</symbol>
|
||||||
</defs>
|
</defs>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
{{block "footerx" .}}
|
||||||
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
|
@ -14,7 +14,6 @@
|
||||||
<link href='https://fonts.gstatic.com' crossorigin rel='preconnect' />
|
<link href='https://fonts.gstatic.com' crossorigin rel='preconnect' />
|
||||||
<link rel="alternate" type="application/rss+xml" title="{{ .title }} » Feed" href="/feed" />
|
<link rel="alternate" type="application/rss+xml" title="{{ .title }} » Feed" href="/feed" />
|
||||||
<link rel="alternate" type="application/rss+xml" title="{{ .title }} » 评论Feed" href="/comments/feed" />
|
<link rel="alternate" type="application/rss+xml" title="{{ .title }} » 评论Feed" href="/comments/feed" />
|
||||||
<link rel='stylesheet' id='enlighterjs-css' href='/wp-content/plugins/enlighter/cache/enlighterjs.min.css?ver=0A0B0C' media='all' />
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/svg\/","svgExt":".svg","source":{"concatemoji":"\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.0.2"}};
|
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/svg\/","svgExt":".svg","source":{"concatemoji":"\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.0.2"}};
|
||||||
|
|
|
@ -2,35 +2,48 @@
|
||||||
|
|
||||||
{{define "content"}}
|
{{define "content"}}
|
||||||
{{ if .post.PostContent}}
|
{{ if .post.PostContent}}
|
||||||
|
{{if .post.Thumbnail.Path}}
|
||||||
|
<div class="single-featured-image-header">
|
||||||
|
<img width="{{.post.Thumbnail.OriginAttachmentData.Width}}" height="{{.post.Thumbnail.OriginAttachmentData.Height}}" src="{{.post.Thumbnail.Path}}" class="attachment-twentyseventeen-featured-image size-twentyseventeen-featured-image wp-post-image" alt="{{.post.PostTitle}}" decoding="async" loading="lazy" srcset="{{.post.Thumbnail.Srcset}}" sizes="{{.post.Thumbnail.Sizes}}">
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
<div class="site-content-contain">
|
||||||
|
<div id="content" class="site-content">
|
||||||
|
<div class="wrap">
|
||||||
<div id="primary" class="content-area">
|
<div id="primary" class="content-area">
|
||||||
<main id="main" class="site-main">
|
<main id="main" class="site-main">
|
||||||
<article id="post-{{.post.Id}}"
|
<article id="post-{{.post.Id}}" class="post-{{.post.Id}} post type-post status-publish format-standard hentry {{if .post.Thumbnail.Path}}has-post-thumbnail{{end}} category-uncategorized">
|
||||||
class="post-{{.post.Id}} post type-post status-publish format-standard hentry category-uncategorized">
|
|
||||||
|
|
||||||
<header class="entry-header">
|
<header class="entry-header">
|
||||||
<h1 class="entry-title">{{.post.PostTitle}}</h1></header><!-- .entry-header -->
|
<div class="entry-meta">
|
||||||
|
<span class="posted-on">
|
||||||
|
<span class="screen-reader-text">发布于</span>
|
||||||
|
<a href="/p/{{.post.Id}}" rel="bookmark">
|
||||||
|
<time class="entry-date published" datetime="{{.post.PostDateGmt}}">{{.post.PostDate|dateCh}}
|
||||||
|
</time>
|
||||||
|
<time class="updated" datetime="{{.post.PostModifiedGmt}}">{{.post.PostModified|dateCh}}
|
||||||
|
</time>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<span class="byline">
|
||||||
|
由
|
||||||
|
<span class="author vcard">
|
||||||
|
<a class="url fn n" href="/p/author/{{.user.UserLogin}}">{{.user.UserLogin}}</a>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<h1 class="entry-title">{{.post.PostTitle}}</h1>
|
||||||
|
</header><!-- .entry-header -->
|
||||||
|
|
||||||
<div class="entry-content">
|
<div class="entry-content">
|
||||||
{{.post.PostContent|unescaped}}
|
{{.post.PostContent|unescaped}}
|
||||||
</div><!-- .entry-content -->
|
</div><!-- .entry-content -->
|
||||||
|
|
||||||
<footer class="entry-footer">
|
<footer class="entry-footer">
|
||||||
<span class="posted-on">
|
<span class="cat-tags-links">
|
||||||
<span class="screen-reader-text">发布于 </span>
|
|
||||||
<a href="/p/{{.post.Id}}" rel="bookmark">
|
|
||||||
<time class="entry-date published updated"
|
|
||||||
datetime="{{.post.PostDateGmt}}">{{.post.PostDate|dateCh}}
|
|
||||||
</time>
|
|
||||||
</a>
|
|
||||||
</span>
|
|
||||||
<span class="byline">
|
|
||||||
<span class="author vcard">
|
|
||||||
<span class="screen-reader-text">作者 </span>
|
|
||||||
<a class="url fn n" href="/p/author/{{.user.UserLogin}}">{{.user.UserLogin}}</a>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
{{if .post.CategoriesHtml}}
|
{{if .post.CategoriesHtml}}
|
||||||
<span class="cat-links">
|
<span class="cat-links">
|
||||||
|
<svg class="icon icon-folder-open" aria-hidden="true" role="img"> <use href="#icon-folder-open" xlink:href="#icon-folder-open"></use> </svg>
|
||||||
<span class="screen-reader-text">分类 </span>
|
<span class="screen-reader-text">分类 </span>
|
||||||
{{.post.CategoriesHtml|unescaped}}
|
{{.post.CategoriesHtml|unescaped}}
|
||||||
</span>
|
</span>
|
||||||
|
@ -38,10 +51,12 @@
|
||||||
|
|
||||||
{{if .post.TagsHtml}}
|
{{if .post.TagsHtml}}
|
||||||
<span class="tags-links">
|
<span class="tags-links">
|
||||||
|
<svg class="icon icon-hashtag" aria-hidden="true" role="img"> <use href="#icon-hashtag" xlink:href="#icon-hashtag"></use> </svg>
|
||||||
<span class="screen-reader-text">标签 </span>
|
<span class="screen-reader-text">标签 </span>
|
||||||
{{.post.TagsHtml|unescaped}}
|
{{.post.TagsHtml|unescaped}}
|
||||||
</span>
|
</span>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
</span>
|
||||||
</footer>
|
</footer>
|
||||||
<!-- .entry-footer -->
|
<!-- .entry-footer -->
|
||||||
|
|
||||||
|
@ -126,10 +141,21 @@
|
||||||
</nav>
|
</nav>
|
||||||
</main><!-- .site-main -->
|
</main><!-- .site-main -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<aside id="secondary" class="widget-area" aria-label="博客边栏">
|
||||||
|
{{template "layout/sidebar" .}}
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{{else}}
|
{{else}}
|
||||||
{{template "layout/empty"}}
|
{{template "layout/empty"}}
|
||||||
{{end }}
|
{{end }}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{ define "footer"}}
|
|
||||||
|
|
||||||
|
{{ define "footerx"}}
|
||||||
<script src='/wp-includes/js/comment-reply.min.js?ver=6.0.2' id='comment-reply-js'></script>
|
<script src='/wp-includes/js/comment-reply.min.js?ver=6.0.2' id='comment-reply-js'></script>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{{template "layout/base" .}}
|
{{template "layout/base" .}}
|
||||||
|
|
||||||
{{define "content" }}
|
{{define "content" }}
|
||||||
|
<div class="site-content-contain">
|
||||||
|
<div id="content" class="site-content">
|
||||||
{{if .posts}}
|
{{if .posts}}
|
||||||
|
|
||||||
<div class="wrap">
|
<div class="wrap">
|
||||||
|
@ -79,3 +81,6 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package twentyseventeen
|
package twentyseventeen
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/elliotchance/phpserialize"
|
"github.com/elliotchance/phpserialize"
|
||||||
"github.com/fthvgb1/wp-go/helper/maps"
|
"github.com/fthvgb1/wp-go/helper/maps"
|
||||||
|
"github.com/fthvgb1/wp-go/helper/slice"
|
||||||
|
str "github.com/fthvgb1/wp-go/helper/strings"
|
||||||
"github.com/fthvgb1/wp-go/internal/pkg/cache"
|
"github.com/fthvgb1/wp-go/internal/pkg/cache"
|
||||||
"github.com/fthvgb1/wp-go/internal/pkg/logs"
|
"github.com/fthvgb1/wp-go/internal/pkg/logs"
|
||||||
"github.com/fthvgb1/wp-go/internal/pkg/models"
|
"github.com/fthvgb1/wp-go/internal/pkg/models"
|
||||||
|
@ -44,6 +47,7 @@ func Hook(status int, c *gin.Context, h gin.H, scene, stats int) {
|
||||||
templ := "twentyseventeen/posts/index.gohtml"
|
templ := "twentyseventeen/posts/index.gohtml"
|
||||||
if _, ok := plugins.IndexSceneMap[scene]; ok {
|
if _, ok := plugins.IndexSceneMap[scene]; ok {
|
||||||
h["HeaderImage"] = getHeaderImage(c)
|
h["HeaderImage"] = getHeaderImage(c)
|
||||||
|
posts := h["posts"].([]models.Posts)
|
||||||
p, ok := h["pagination"]
|
p, ok := h["pagination"]
|
||||||
if ok {
|
if ok {
|
||||||
pp, ok := p.(pagination.ParsePagination)
|
pp, ok := p.(pagination.ParsePagination)
|
||||||
|
@ -51,18 +55,58 @@ func Hook(status int, c *gin.Context, h gin.H, scene, stats int) {
|
||||||
h["pagination"] = pagination.Paginate(paginate, pp)
|
h["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 {
|
||||||
|
cate := slice.Filter(cache.Categories(c), func(my models.TermsMy) bool {
|
||||||
|
return my.Name == c.Param("category")
|
||||||
|
})[0]
|
||||||
|
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 {
|
} else if scene == plugins.Detail {
|
||||||
h["HeaderImage"] = getHeaderImage(c)
|
h["HeaderImage"] = getHeaderImage(c)
|
||||||
|
post := h["post"].(models.Posts)
|
||||||
|
h["bodyClass"] = bodyClass(scene, int(post.Id))
|
||||||
|
host, _ := wpconfig.Options.Load("siteurl")
|
||||||
|
img := plugins.Thumbnail(post.Thumbnail.OriginAttachmentData, "thumbnail", host, "thumbnail", "post-thumbnail")
|
||||||
|
img.Width = img.OriginAttachmentData.Width
|
||||||
|
img.Height = img.OriginAttachmentData.Height
|
||||||
|
img.Sizes = "100vw"
|
||||||
|
img.Srcset = fmt.Sprintf("%s %dw, %s", img.Path, img.Width, img.Srcset)
|
||||||
|
post.Thumbnail = img
|
||||||
|
h["post"] = post
|
||||||
templ = "twentyseventeen/posts/detail.gohtml"
|
templ = "twentyseventeen/posts/detail.gohtml"
|
||||||
}
|
}
|
||||||
c.HTML(status, templ, h)
|
c.HTML(status, templ, h)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func 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}) {
|
||||||
|
t.Thumbnail.Sizes = "(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px"
|
||||||
|
} else {
|
||||||
|
t.Thumbnail.Sizes = "100vw"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return t
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func getHeaderImage(c *gin.Context) (r models.PostThumbnail) {
|
func getHeaderImage(c *gin.Context) (r models.PostThumbnail) {
|
||||||
r.Path = "/wp-content/themes/twentyseventeen/assets/images/header.jpg"
|
r.Path = "/wp-content/themes/twentyseventeen/assets/images/header.jpg"
|
||||||
r.Width = 2000
|
|
||||||
r.Height = 1200
|
|
||||||
meta, err := getHeaderMarkup()
|
meta, err := getHeaderMarkup()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logs.ErrPrintln(err, "解析主题背景图设置错误")
|
logs.ErrPrintln(err, "解析主题背景图设置错误")
|
||||||
|
@ -74,10 +118,18 @@ func getHeaderImage(c *gin.Context) (r models.PostThumbnail) {
|
||||||
logs.ErrPrintln(err, "获取主题背景图信息错误")
|
logs.ErrPrintln(err, "获取主题背景图信息错误")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
host, _ := wpconfig.Options.Load("siteurl")
|
||||||
|
m.Thumbnail = plugins.Thumbnail(m.AttachmentMetadata, "thumbnail", host, "thumbnail", "post-thumbnail", "twentyseventeen-thumbnail-avatar")
|
||||||
if m.Thumbnail.Path != "" {
|
if m.Thumbnail.Path != "" {
|
||||||
r = m.Thumbnail
|
r = m.Thumbnail
|
||||||
|
if len(m.AttachmentMetadata.Sizes) > 0 {
|
||||||
|
r.Srcset = str.Join(r.Path, " 2000vw, ", r.Srcset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
r.Width = 2000
|
||||||
|
r.Height = 1200
|
||||||
|
r.Sizes = "100vw"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,3 +145,25 @@ func getHeaderMarkup() (r HeaderImageMeta, err error) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func bodyClass(scene, d int, a ...any) string {
|
||||||
|
s := ""
|
||||||
|
if scene == plugins.Search {
|
||||||
|
if d > 0 {
|
||||||
|
s = "search-results"
|
||||||
|
} else {
|
||||||
|
s = "search-no-results"
|
||||||
|
}
|
||||||
|
} else if scene == plugins.Category {
|
||||||
|
s = fmt.Sprintf("category-%d %v", d, a[0])
|
||||||
|
} else if scene == plugins.Detail {
|
||||||
|
s = fmt.Sprintf("postid-%d", d)
|
||||||
|
}
|
||||||
|
return map[int]string{
|
||||||
|
plugins.Home: "home blog ",
|
||||||
|
plugins.Archive: "archive date page-two-column",
|
||||||
|
plugins.Category: 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]
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package stream
|
package stream
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/fthvgb1/wp-go/safety"
|
"github.com/fthvgb1/wp-go/helper/maps"
|
||||||
"github.com/fthvgb1/wp-go/taskPools"
|
"github.com/fthvgb1/wp-go/taskPools"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
@ -24,15 +24,8 @@ func newMapX[K comparable, V any]() mapX[K, V] {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func SimpleMapFilterAndMapToSlice[R any, K comparable, V any](mm SimpleMapStream[K, V], fn func(K, V) (R, bool), c int) SimpleSliceStream[R] {
|
func SimpleMapFilterAndMapToSlice[R any, K comparable, V any](mm SimpleMapStream[K, V], fn func(K, V) (R, bool)) SimpleSliceStream[R] {
|
||||||
rr := safety.NewSlice([]R{})
|
return NewSimpleSliceStream(maps.FilterToSlice(mm.m, fn))
|
||||||
mm.ParallelForEach(func(k K, v V) {
|
|
||||||
vv, ok := fn(k, v)
|
|
||||||
if ok {
|
|
||||||
rr.Append(vv)
|
|
||||||
}
|
|
||||||
}, c)
|
|
||||||
return NewSimpleSliceStream(rr.Load())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func SimpleMapParallelFilterAndMapToMap[K comparable, V any, KK comparable, VV any](mm SimpleMapStream[KK, VV], fn func(KK, VV) (K, V, bool), c int) SimpleMapStream[K, V] {
|
func SimpleMapParallelFilterAndMapToMap[K comparable, V any, KK comparable, VV any](mm SimpleMapStream[KK, VV], fn func(KK, VV) (K, V, bool), c int) SimpleMapStream[K, V] {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user