文档首页 / 模板开发 / 后台 ↔ 变量对照
后台 ↔ 变量对照
写模板时最常卡住的问题只有一个:后台这个输入框,模板里到底叫什么?这一页把「后台位置 → 数据库列 → 模板变量」一条线拉直,按后台页面顺序排列,查到就能用。
看表方法
左边是你在后台看到的标签,中间是数据库列名,右边是模板写法。列表页用 $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 取这里 |
| 自定义 canonical | canonical | {$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: 链接直接用 |
{$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 · 文档随代码更新