ThinkWo 开发文档DOCS v1.0.45
快速开始
文档首页 / 模板开发 / 后台 ↔ 变量对照

后台 ↔ 变量对照

写模板时最常卡住的问题只有一个:后台这个输入框,模板里到底叫什么?这一页把「后台位置 → 数据库列 → 模板变量」一条线拉直,按后台页面顺序排列,查到就能用。

看表方法

左边是你在后台看到的标签,中间是数据库列名,右边是模板写法。列表页用 $list,详情页用 $content,两者字段名相同,只有少数派生字段是详情页独有的(表里已标注)。

一、内容编辑页

后台路径:内容管理 → 添加 / 编辑内容。这是最常用的一张表,覆盖 90% 的模板取值需求。

后台标签数据库列模板变量说明
标题title{$list.title}列表/详情都有
副标题 / 型号subtitle{$list.subtitle}产品型号常放这里
URL 别名slug{$list.slug}留空自动生成,拼 URL 用
所属栏目sort_id{$list.sort_name}名字/链接/别名三个派生字段见下
缩略图ico{$list.ico}已自动转 WebP + 多尺寸
图集images(JSON){volist name="content.images" id="img"}只有详情页是数组
摘要summary{$list.summary}不是 description,别写错
正文content{$content.content|html_entity_decode|raw}列表页也会返回,但通常不用
标签tags{$list.tags}详情页另有数组 {$content.tag_list}
推荐属性(勾选)attr{$list.attr}逗号分隔,如 recommend,hot;也可用 {tw:attr name="recommend"} 直接筛
参考价price{$list.price}decimal(12,2),只能存数字
价格单位unit{$list.unit}如 /set、起
产品型号model_no{$list.model_no}—
最小起订量moq{$list.moq}—
扩展meta{$list.meta}纯文本;栏目有自定义字段时改存 JSON,见 自定义字段
作者 / 来源author / source{$list.author}author 列表/详情都有;source 仅详情页
浏览量views{$list.views}详情页每次访问 +1,列表显示历史值
发布时间publish_time{$list.date} / {$list.datetime}格式化后:Oct 30, 2026 / 2026-10-30
SEO 标题 / 关键词 / 描述seo_title 等由 {:tw_seo()} 统一输出一般不单独取
禁止收录noindex同上输出 robots noindex
跨语言配对trans_key同上两语言填相同值即互指 hreflang
状态 / 排序status / sort不输出控制是否发布、列表顺序
自定义字段meta(JSON){$list.字段键}键名在栏目「字段」页定义

内容派生字段(数据库里没有,程序算出来的)

变量可用页面含义
{$list.url}列表 / 详情详情页完整链接
{$list.date} / {$list.datetime}列表 / 详情展示用日期 / HTML 属性用日期
{$list.lines}列表 / 详情正文按行拆成数组,做功能清单、规格列表很方便
{$list.sort_name} / sort_url / sort_slug列表 / 详情所属栏目的名称、链接、别名
{$list.cf}列表 / 详情全部自定义字段的数组(键 = 字段键)
{$content.tag_list}仅详情标签数组
{$content.images}仅详情图集数组
{$content.sort}仅详情所属栏目的整行数据(不只是名字)

二、栏目编辑页

后台路径:栏目管理 → 添加 / 编辑栏目。模板里统一用 {$sort.xxx};导航里用 {$nav.xxx},字段名相同。

后台标签数据库列模板变量说明
栏目名称name{$sort.name}—
副标题subname{$sort.subname}后台表单未提供输入框,通常为空
URL 别名slug{$sort.slug}拼 URL,也用于 {tw:list sort="…"}
上级栏目pid{$sort.pid}0 = 一级
栏目类型type{$sort.type}list / page / link
外链地址link{$sort.link}类型=外链时跳转用
栏目缩略图ico{$sort.ico}分类条小图、二级菜单图标常用
栏目大图pic{$sort.pic}内页顶部 banner 常用
幻灯片分组slide_group{tw:slide /} 不写 group 时自动用它留空则内页不用幻灯片
栏目简介description{$sort.description}内页导语 / 列表页说明
SEO 标题 / 关键词 / 描述seo_title 等{:tw_seo()} 输出列表页 SEO 取这里
自定义 canonicalcanonical{$canonical}(列表页)留空自动生成
列表模板template_list—决定用哪个 .html 渲染列表页
详情模板template_detail—同上,详情页
单页模板template_page—同上,单页
跨语言配对trans_key{:tw_seo()}两语言相同值即互指
状态 / 排序status / sort不输出0 = 不显示在前台导航

栏目派生字段

变量含义
{$sort.url}栏目链接(单页/列表自动区分)
{$sort.children}子栏目数组,结构同导航项
{$sort.son}是否有子栏目(0/1),判断箭头用
{$nav.active}当前栏目高亮(仅导航项有)
{$nav.scode}子栏目查询用标识(仅导航项有)

三、站点设置

后台路径:站点设置。这里填的每一项,模板里都是 {$site.键名},键名与数据库 tw_setting.skey 完全一致。程序已给所有键准备了空串兜底,没填不会报错。

基础信息

后台标签模板变量说明
网站名称{$site.site_name}logo 缺失时的回退文字也用它
Logo 图片{$site.logo}为空时用 $site.logo_text
Logo 文字{$site.logo_text}留空自动回退成网站名称
站点图标 favicon{$site.favicon}放 <link rel="icon">
站点主题{$theme}不是 $site.theme,两者值相同
站点域名{$site.site_domain}拼绝对地址时可参考
备案号{$site.site_icp}页脚常用
默认货币{$site.currency}货币切换的初始值

联系方式

后台标签模板变量说明
公司名称{$site.company}留空回退成网站名称
联系电话{$site.phone}tel: 链接直接用
邮箱{$site.email}mailto: 链接直接用
WhatsApp{$site.whatsapp}注意是完整链接或号码,看模板怎么拼
地址{$site.address}—
国家 / 地区{$site.country}—
版权信息{$site.copyright}留空自动生成「© 网站名」
社交账号{$site.social_facebook} / social_linkedin / social_youtube为空就不输出图标

SEO 设置 / 代码与统计

后台标签模板变量说明
首页标题{$site.seo_index_title}留空回退成网站名称
标题格式{$site.seo_title_format}由 {:tw_seo()} 组装
首页关键词 / 描述{$site.site_keywords} / site_description多语言时按语言输出
分享图 og:image{$site.og_image}—
统计代码 / head / footer 代码{$site.analytics_code} 等必须 |raw 输出,否则代码变文本
sitemap 开关 / 静态化开关{$site.sitemap_enable} / html_cache模板一般不用
访客统计开关 / 保留天数{$site.visit_enable} / visit_keep_days模板一般不用
邮件与翻译设置不要往模板里取

smtp_pass、translate_secret 这类是敏感配置,虽然 $site 里能拿到,但绝不要输出到前台。模板只需要展示类信息。

四、幻灯片

后台路径:幻灯片管理 → 先建分组,再往分组里加条目。模板用 {tw:slide group="分组code"} 调用。

后台标签数据库列模板变量说明
主标题title{$slide.title}—
副标题subtitle{$slide.subtitle}—
描述summary{$slide.summary}—
图片(PC)image{$slide.image_url}派生字段,等同 image
图片(手机)image_mobile{$slide.mobile_image}为空时用 PC 图兜底
视频video{$slide.video} / {$slide.has_video}mp4 地址,可空
跳转链接url{$slide.url}—
打开方式target{$slide.target_attr|raw}已拼好 target="_blank" rel="noopener"
按钮文字btn_text{$slide.btn_text}—
定时开始 / 结束start_time / end_time不输出0 = 不限时间
循环序号—{$slide.index} / first / last派生:第几张、是否首/末张

五、语言与货币

后台位置模板变量说明
语言列表 → 语言代码{$lang}当前语言,如 en
语言列表 → 全部启用语言{$langs}数组,每项含 code、name、url
语言列表 → 地区{$region}写 <html lang="{$lang}"> 时用不到,一般和 $lang 一致或更短
语言列表 → 书写方向{$rtl}阿拉伯语等为真,输出 dir="rtl"
货币管理{$currencies}数组,每项含 code、name、symbol、rate

六、系统自动给的变量(后台没有对应项)

变量可用页面含义
{$theme}全部当前主题目录名
{$navs}全部一级导航数组(最多 12 条)
{$is_home}全部是否首页
{$is_404}404 页固定为 1
{$inq_captcha}全部询盘验证码是否开启
{$position}列表 / 详情 / 单页 / 搜索面包屑数组,每项含 name、url
{$canonical}列表 / 详情当前页 canonical 地址
{$keyword}搜索页搜索关键词
{$tw_page}列表 / 搜索当前页码(从 URL 解析)
{$page} / {$total}{tw:list} 之后分页信息数组 / 记录总数
{$prev} / {$next}详情上一篇 / 下一篇(含 title、url)

七、反查:知道前台文字,怎么找模板位置

手里有什么怎么查
前台一句话在 template/{主题}/ 里搜这句话,直接落到文件名与行号
一个 CSS 类名F12 看到 class="price-card" → 搜 price-card → 找到对应片段
一个变量名搜 $list. / $sort. / $site. 看哪个文件在用,反推是哪块
一个后台字段查本页表 → 得到变量名 → 全目录搜这个变量
# 在主题目录里反搜(Linux / 宝塔终端)
grep -rn "免费打样" template/mytheme/

# 只搜 html
grep -rn "price-card" template/mytheme/*.html template/mytheme/comm/

# 搜某个变量在哪用到
grep -rn '\$site\.phone' template/mytheme/
栏目到底用哪个模板

打开 栏目管理 → 编辑,看三个下拉框:列表模板(template_list)、详情模板(template_detail)、单页模板(template_page)。下拉里显示的就是文件名去掉后缀,选中哪个就用哪个文件渲染。

八、三种「取不到值」的常见原因

现象原因与处理
后台明明填了,前台空白① 静态化缓存没清;② 字段名写错(最常见是 description 与 summary);③ 列表页取了只有详情页才有的字段(如 images)
输出一段 {"xxx":"yyy"}该栏目定义了自定义字段,meta 变成了 JSON。改用 {$list.字段键}
页面直接报「未定义变量」取的不是系统变量(多半是自己拼的名字)。系统变量见本页六节,缺的要么后台加自定义字段,要么在插件里注入

字段与标签的完整清单见 标签与函数;自定义字段机制见 栏目自定义字段。

ThinkWo CMS v1.0.45 开发文档 · 基于 ThinkPHP 8.1.4 + LayUI 2.12 · 文档随代码更新