最后更新时间:2026-09-22 18:55:51
VVCMS 在模板层暴露的函数是显式白名单,不是把项目里所有函数都开放给模板。当前共 47 个,分两类:
HasPrefix、default、date、url、asset、StrSub、Split、printf、safeHTML。Site、Column、ColumnContents、ContentByID、Tags、Related、Messages、Reverse。ColumnsTree 曾用于读取全站栏目树,现已从白名单中移除,原因是安全收敛:把完整栏目结构直接暴露给模板层,会让模板作者(不一定是站点管理员)有能力输出本不该对外展示的栏目,例如未启用、隐藏或内部使用的栏目。
这不是遗漏,是刻意为之——项目里有专门的单元测试断言它不得出现在模板函数表中。
按需组合下面几个函数,只取真正要展示的部分:
ChildrenColumns 传父栏目 slug —— 取某个栏目的直接子栏目ParentColumn 传栏目 ID —— 取父栏目,常用于面包屑SiblingColumns 传栏目 ID —— 取同级栏目Column 传 slug、或 ColumnByID 传 ID —— 取单个栏目这样既拿到了导航结构,又不会把整棵内部栏目树泄漏出去。
函数表由 themeTemplateFuncs() 注册,并有单元测试强制校验名称与总数。这意味着:
模板层不支持运行时注册自定义函数,必须改代码。完整路径是同步改三处:
server/gin.go 中的 themeTemplateFuncs() 增加函数实现server/gin_test.go 中 TestThemeTemplateFuncNames 的白名单补上名称(总数会变,测试会校验)三处缺一处,要么测试过不去,要么文档与实际对不上。