最近文章组件化
This commit is contained in:
parent
1da5062356
commit
ad875857d8
|
@ -1,5 +1,6 @@
|
|||
package components
|
||||
|
||||
const (
|
||||
SearchFormArgs = "SearchFormArgs"
|
||||
SearchFormArgs = "SearchFormArgs"
|
||||
RecentPostsArgs = "RecentPostsArgs"
|
||||
)
|
||||
|
|
72
internal/theme/wp/recentposts.go
Normal file
72
internal/theme/wp/recentposts.go
Normal file
|
@ -0,0 +1,72 @@
|
|||
package wp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/fthvgb1/wp-go/helper/maps"
|
||||
"github.com/fthvgb1/wp-go/helper/number"
|
||||
"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/constraints"
|
||||
"github.com/fthvgb1/wp-go/internal/pkg/models"
|
||||
"github.com/fthvgb1/wp-go/internal/theme/wp/components"
|
||||
"github.com/fthvgb1/wp-go/internal/wpconfig"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var recentPostsArgs = map[string]string{
|
||||
"{$before_widget}": `<aside id="recent-posts-2" class="widget widget_recent_entries">`,
|
||||
"{$after_widget}": "</aside>",
|
||||
"{$before_title}": `<h2 class="widget-title">`,
|
||||
"{$after_title}": "</h2>",
|
||||
"{$before_sidebar}": "",
|
||||
"{$after_sidebar}": "",
|
||||
"{$nav}": "",
|
||||
"{$navCloser}": "",
|
||||
}
|
||||
|
||||
var recentPostsTemplate = `{$before_widget}
|
||||
{$nav}
|
||||
<ul>
|
||||
{$li}
|
||||
</ul>
|
||||
{$navCloser}
|
||||
{$after_widget}
|
||||
`
|
||||
|
||||
var recentConf = map[any]any{
|
||||
"number": int64(5),
|
||||
"show_date": false,
|
||||
"title": "近期文章",
|
||||
}
|
||||
|
||||
func RecentPosts(h *Handle) string {
|
||||
args := GetComponentsArgs(h, components.RecentPostsArgs, recentPostsArgs)
|
||||
args = maps.Merge(recentPostsArgs, args)
|
||||
conf := wpconfig.GetPHPArrayVal[map[any]any]("widget_recent-posts", recentConf, int64(2))
|
||||
if slice.IsContained(h.CommonThemeMods().ThemeSupport.HTML5, "navigation-widgets") {
|
||||
args["{$nav}"] = fmt.Sprintf(`<nav aria-label="%s">`, conf["title"])
|
||||
args["{$navCloser}"] = "</nav>"
|
||||
}
|
||||
currentPostId := uint64(0)
|
||||
if h.Scene() == constraints.Detail {
|
||||
currentPostId = h.Detail.Post.Id
|
||||
}
|
||||
posts := slice.Map(cache.RecentPosts(h.C, int(conf["number"].(int64))), func(t models.Posts) string {
|
||||
t = ProjectTitle(t)
|
||||
date := ""
|
||||
if conf["show_date"].(bool) {
|
||||
date = fmt.Sprintf(`<span class="post-date">%s</span>`, t.PostDateGmt.Format("2006年01月02日"))
|
||||
}
|
||||
ariaCurrent := ""
|
||||
if currentPostId == t.Id {
|
||||
ariaCurrent = ` aria-current="page"`
|
||||
}
|
||||
return fmt.Sprintf(`<li>
|
||||
<a href="%s"%s>%s</a>
|
||||
%s
|
||||
</li>`, str.Join("/p/", number.ToString(t.Id)), ariaCurrent, t.PostTitle, date)
|
||||
})
|
||||
s := strings.ReplaceAll(recentPostsTemplate, "{$li}", strings.Join(posts, "\n"))
|
||||
return str.Replace(s, args)
|
||||
}
|
Loading…
Reference in New Issue
Block a user