Compare commits

...

3 Commits

Author SHA1 Message Date
cc09668fd7 最近评论组件化 2023-03-10 19:38:32 +08:00
179e1e14e2 完善 2023-03-10 18:33:09 +08:00
ad875857d8 最近文章组件化 2023-03-10 18:20:38 +08:00
3 changed files with 137 additions and 1 deletions

View File

@ -1,5 +1,6 @@
package components package components
const ( const (
SearchFormArgs = "SearchFormArgs" SearchFormArgs = "SearchFormArgs"
RecentPostsArgs = "RecentPostsArgs"
) )

View File

@ -0,0 +1,61 @@
package wp
import (
"fmt"
"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/models"
"github.com/fthvgb1/wp-go/internal/theme/wp/components"
"github.com/fthvgb1/wp-go/internal/wpconfig"
"strings"
)
var recentCommentsArgs = map[string]string{
"{$before_widget}": `<aside id="recent-comments-2" class="widget widget_recent_comments">`,
"{$after_widget}": "</aside>",
"{$before_title}": `<h2 class="widget-title">`,
"{$after_title}": "</h2>",
"{$before_sidebar}": "",
"{$after_sidebar}": "",
"{$nav}": "",
"{$navCloser}": "",
"{$title}": "",
"{$recent_comments_id}": "recentcomments",
}
var recentCommentConf = map[any]any{
"number": int64(5),
"title": "近期评论",
}
var recentCommentsTemplate = `{$before_widget}
{$nav}
{$title}
<ul id="{$recent_comments_id}">
{$li}
</ul>
{$navCloser}
{$after_widget}
`
func RecentComments(h *Handle) string {
args := GetComponentsArgs(h, components.RecentCommentsArgs, recentCommentsArgs)
args = maps.Merge(recentCommentsArgs, args)
conf := wpconfig.GetPHPArrayVal[map[any]any]("widget_recent-comments", recentCommentConf, int64(2))
args["{$title}"] = str.Join(args["{$before_title}"], conf["title"].(string), args["{$after_title}"])
if slice.IsContained(h.CommonThemeMods().ThemeSupport.HTML5, "navigation-widgets") {
args["{$nav}"] = fmt.Sprintf(`<nav aria-label="%s">`, conf["title"])
args["{$navCloser}"] = "</nav>"
}
comments := slice.Map(cache.RecentComments(h.C, int(conf["number"].(int64))), func(t models.Comments) string {
return fmt.Sprintf(` <li>
<span class="comment-author-link">%s</span>发表在
<a href="/p/%v#comment-%v">%s</a>
</li>`, t.CommentAuthor, t.CommentId, t.CommentPostId, t.PostTitle)
})
s := strings.ReplaceAll(recentCommentsTemplate, "{$li}", strings.Join(comments, "\n"))
return str.Replace(s, args)
}

View File

@ -0,0 +1,74 @@
package wp
import (
"fmt"
"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/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}": "",
"{$title}": "",
}
var recentPostsTemplate = `{$before_widget}
{$nav}
{$title}
<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))
args["{$title}"] = str.Join(args["{$before_title}"], conf["title"].(string), args["{$after_title}"])
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 = str.ToInteger(h.C.Param("id"), uint64(0))
}
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="/p/%v"%s>%s</a>
%s
</li>`, t.Id, ariaCurrent, t.PostTitle, date)
})
s := strings.ReplaceAll(recentPostsTemplate, "{$li}", strings.Join(posts, "\n"))
return str.Replace(s, args)
}