@@ -0,0 +1,83 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"videoweb/app/service/playletser"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// More 专题详情页 SSR:专题由路由 slug 标识;历史 /more 地址会跳转到 /topic canonical。
|
||||
func More(c *gin.Context) {
|
||||
q := playletser.ParseRecommendQuery(routeOrQuery(c, "page", "page"))
|
||||
if slug := strings.TrimSpace(c.Param("slug")); slug != "" {
|
||||
if id := playletser.ParseDetailID(slug); id > 0 {
|
||||
q.ThemeID = id
|
||||
} else {
|
||||
q.ThemeSlug = slug
|
||||
}
|
||||
}
|
||||
if path := c.Request.URL.Path; path == "/more" || strings.HasPrefix(path, "/more/") {
|
||||
redirectCanonical(c, playletser.RecommendPagePath(q))
|
||||
return
|
||||
}
|
||||
themes := playletser.FetchThemesOrEmpty(c, 2)
|
||||
themeName := ""
|
||||
for _, theme := range themes {
|
||||
matchesID := q.ThemeID > 0 && theme.ID == q.ThemeID
|
||||
matchesSlug := strings.TrimSpace(q.ThemeSlug) != "" && strings.EqualFold(strings.TrimSpace(theme.Slug), strings.TrimSpace(q.ThemeSlug))
|
||||
if !matchesID && !matchesSlug {
|
||||
continue
|
||||
}
|
||||
themeName = strings.TrimSpace(theme.Name)
|
||||
if q.ThemeID <= 0 {
|
||||
q.ThemeID = theme.ID
|
||||
}
|
||||
if strings.TrimSpace(theme.Slug) != "" {
|
||||
q.ThemeSlug = strings.TrimSpace(theme.Slug)
|
||||
}
|
||||
break
|
||||
}
|
||||
if redirectCanonical(c, playletser.RecommendPagePath(q)) {
|
||||
return
|
||||
}
|
||||
raw := playletser.FetchRecommendListOrEmpty(c, q)
|
||||
if playletser.PageOutOfRange(q.PageNum, q.PageSize, raw.TotalCount) {
|
||||
NotFound(c, "页面不存在")
|
||||
return
|
||||
}
|
||||
hasIdentifier := q.ThemeID > 0 || strings.TrimSpace(q.ThemeSlug) != ""
|
||||
if emptyScopedPage(hasIdentifier, raw.TotalCount, len(raw.List)) {
|
||||
NotFound(c, "专题不存在")
|
||||
return
|
||||
}
|
||||
title := playletser.RecommendThemeTitle(themeName, raw.SeoInfo.Title, q.ThemeID)
|
||||
if queryTitle := strings.TrimSpace(c.Query("title")); queryTitle != "" {
|
||||
title = queryTitle
|
||||
}
|
||||
heading := title
|
||||
if !strings.HasSuffix(heading, "介绍") {
|
||||
heading += "介绍"
|
||||
}
|
||||
description := strings.TrimSpace(raw.SeoInfo.Description)
|
||||
if description == "" {
|
||||
description = "精品高分 AI 成人短剧专题,精选高人气、高评分 AI 原创短剧,每日持续更新。涵盖多种热门剧情与角色设定,为你带来高质量、高清流畅的观影体验。"
|
||||
}
|
||||
data := gin.H{
|
||||
"title": title,
|
||||
"pageKey": "topic",
|
||||
"pageName": title,
|
||||
"pageTitle": title,
|
||||
"topicHeading": heading,
|
||||
"topicDescription": description,
|
||||
"pagePath": playletser.RecommendCanonicalPath(q.ThemeID, q.ThemeSlug),
|
||||
"seoInfo": raw.SeoInfo,
|
||||
"list": raw.List,
|
||||
"itemListOffset": (q.PageNum - 1) * q.PageSize,
|
||||
"pagination": playletser.BuildRecommendPagination(q, raw.TotalCount),
|
||||
}
|
||||
if raw.TotalCount <= 0 || len(raw.List) == 0 {
|
||||
setNoIndex(data, true)
|
||||
}
|
||||
HTMLOK(c, "more.html", data)
|
||||
}
|
||||
Reference in New Issue
Block a user