更新website后端

This commit is contained in:
2026-09-15 00:08:36 +08:00
parent 7e6a3e969f
commit 9875832019
30 changed files with 1428 additions and 38 deletions
+13
View File
@@ -213,6 +213,19 @@ func renderSelfClose(content string, ctx *RenderCtx) (string, error) {
return out, nil
}
// SiteGlobals 返回站点级全局标签值(key 即标签名),与模板内 {yz:xxx} 完全同源。
// 供前台公开接口(GET /site/setting)输出给 SPA 官网使用,保证 SPA 与 themes 直出模板展示一致。
func SiteGlobals(tid uint64) map[string]string {
if globalProvider == nil {
return map[string]string{}
}
vals, err := globalProvider(tid, &RenderCtx{Tid: tid})
if err != nil || vals == nil {
return map[string]string{}
}
return vals
}
// renderGlobals 替换全局标签;未提供的标签置空
func renderGlobals(content string, ctx *RenderCtx) string {
var vals map[string]string
+12 -8
View File
@@ -37,26 +37,30 @@ func TagDocs() []TagMeta {
Name: "站点基本信息",
Category: "global",
Syntax: "{yz:sitename}、{yz:logo}、{yz:ico} …直接写在模板任意位置",
Desc: "取自当前租户的站点设置(backend 端 - 站点设置 - 基本信息)。直接替换为文本或地址,无需闭合;未配置的项输出空字符串。点击行末复制按钮可复制标签。",
Desc: "取自当前站点的站点设置。租户站点来自「站点设置 - 基本信息」(backend 端);平台官网(平台主域名)优先取「官网管理 - 站点设置」(platform 端),未填写时回退基本信息。直接替换为文本或地址,无需闭合;未配置的项输出空字符串。点击行末复制按钮可复制标签。",
Params: nil,
Fields: []string{
"sitename 站点名称,常用于 <title> 和页头 来源:基本信息-站点名称",
"logo 彩色 Logo 图片地址,适合浅色背景 来源:基本信息-站点LOGO",
"logow 白色 Logo 图片地址,适合深色背景/页脚 来源:基本信息-白色LOGO",
"sitename 站点名称,常用于 <title> 和页头 来源:站点设置-站点名称",
"subtitle 副标题,站点名称下方的补充说明 来源:官网管理-站点设置-副标题",
"logo 深色 Logo 图片地址,适合浅色背景 来源:站点设置-深色LOGO",
"logow 浅色 Logo 图片地址,适合深色背景/页脚 来源:站点设置-浅色LOGO",
"ico 站点图标地址,用于 <link rel=\"icon\"> 来源:基本信息-站点图标",
"companyname 公司全称 来源:基本信息-公司名称",
"companyintroduction 企业介绍(富文本HTML,直接用 div 承接) 来源:基本信息-企业介绍",
"description 站点简介,可用于 meta description 来源:基本信息-站点描述",
"copyright 版权信息,常用于页脚 来源:基本信息-版权信息",
"icp ICP 备案号,常用于页脚 来源:基本信息-ICP备案",
"copyright 版权信息,常用于页脚 来源:站点设置-版权信息",
"icp ICP 备案号,常用于页脚 来源:站点设置-ICP备案",
"policeicp 公安备案号/公安网备标识,常用于页脚 来源:官网管理-站点设置-公安备案",
"privacy 隐私政策链接地址,如 /page/privacy 来源:官网管理-站点设置-隐私政策",
"terms 使用条款链接地址,如 /page/terms 来源:官网管理-站点设置-使用条款",
},
Example: "<head>\n <title>{yz:sitename}</title>\n <link rel=\"icon\" href=\"{yz:ico}\">\n <meta name=\"description\" content=\"{yz:description}\">\n</head>\n<img src=\"{yz:logo}\" alt=\"{yz:sitename}\">\n<div class=\"about\">{yz:companyintroduction}</div>\n<footer>\n <p>{yz:copyright}</p>\n <p>{yz:icp}</p>\n</footer>",
Example: "<head>\n <title>{yz:sitename}</title>\n <link rel=\"icon\" href=\"{yz:ico}\">\n <meta name=\"description\" content=\"{yz:description}\">\n</head>\n<img src=\"{yz:logo}\" alt=\"{yz:sitename}\">\n<div class=\"about\">{yz:companyintroduction}</div>\n<footer>\n <p>{yz:copyright}</p>\n <p>{yz:icp}</p>\n <p>{yz:policeicp}</p>\n <p>\n <a href=\"{yz:privacy}\">隐私政策</a>\n <a href=\"{yz:terms}\">使用条款</a>\n </p>\n</footer>",
},
{
Name: "联系方式",
Category: "global",
Syntax: "{yz:phone}、{yz:email}、{yz:address}、{yz:worktime}",
Desc: "取自租户的公司信息(backend 端 - 公司信息),常用于页头联系栏和页脚。直接替换为文本,无需闭合。",
Desc: "取自公司信息。平台官网优先取「官网管理 - 站点设置 - 公司信息」,未填写时回退租户的公司信息(backend 端 - 公司信息)。直接替换为文本,无需闭合。",
Params: nil,
Fields: []string{
"phone 联系电话,别名 {yz:tel}、{yz:mobile} 三者等价 来源:公司信息-联系电话",
+16
View File
@@ -68,6 +68,7 @@ func globalSiteInfo(tid uint64, ctx *RenderCtx) (map[string]string, error) {
"companyintroduction": "",
"phone": "", "tel": "", "mobile": "", "email": "", "address": "", "worktime": "",
"keywords": "", "seotitle": "", "seodescription": "",
"policeicp": "", "privacy": "", "terms": "",
"aboutus": "/page/about", "contact": "/page/contact", "news": "/news", "team": "/page/team",
}
var row models.TenantSiteSetting
@@ -115,6 +116,21 @@ func globalSiteInfo(tid uint64, ctx *RenderCtx) (map[string]string, error) {
out["seotitle"] = vals["seoTitle"]
out["seodescription"] = vals["seoDescription"]
}
// 平台官网(tid 1)额外读取 platform 端「官网管理 - 站点设置」
// (yz_platform_site_setting,通用键值结构:tag 即标签名)。
// 值非空时覆盖同名全局标签,为空时保证标签存在(输出空串);租户站点不受影响。
if tid == 1 {
for k, v := range models.GetPlatformSiteTagMap() {
if v == "" {
if _, ok := out[k]; !ok {
out[k] = ""
}
continue
}
out[k] = v
}
}
return out, nil
}