迅睿CMS 模板标签:{dr_} 语法怎么走,为什么改了数据前台没变
迅睿前台模板里的 dr 标签不像普通模板引擎只做变量输出,而是当场触发一次数据库查询再渲染成 HTML,正因为如此才出现后台数据改了、前台还是旧的这类问题。这篇讲清 dr 标签的三种形态、参数该去哪个文件查、循环里字段表的用法,以及模板编译缓存、数据查询缓存、页面静态化这几层缓存在改动后各需要怎么处理。
迅睿前台模板里到处是 {dr_模块_动作 ...} 这样的标签。它不像 ThinkPHP 那种模板引擎只做变量输出,而是直接触发一次数据库查询并渲染成 HTML。理解这一点,才能理解为什么「改了数据前台没变」。
一、标签的三种形态
{dr_news_list module=news catid=1 num=10}
<li>{$t.title}第一类是循环标签,成对出现,内部用 $t 取当前行;第二类是单条标签,直接展开字段;第三类是片段标签,引入预置的公共区块。
二、参数从哪查
别猜参数名。后台「模块 → 内容模型 → 模板标签」里有生成器,选模块、选字段、填条数,直接吐出可用标签。手写猜参数是新手最大的时间黑洞——比如列表标签的条数参数是 num 不是 limit,排序是 order=updatetime_desc 这种复合写法,猜不出来。
三、$t 里到底有什么
循环内部 $t 是一个数组,键名就是内容模型里的字段名,加上几个系统字段:
键 说明 $t.id内容ID $t.title标题 $t.url详情页地址(已按伪静态拼好) $t.catid所属栏目ID $t.updatetime更新时间戳 $t.thumb缩略图路径(没传就是空串)
$t.url 是重点:它由框架按当前伪静态配置生成,不要自己在模板里拼 /news/show/{$t.id}.html。一旦站点改了规则,硬拼的链接全断,用 $t.url 的自动跟着变。
四、改了数据前台没变:四层缓存
这是迅睿新手提问频率最高的问题。缓存有四层,必须逐层排查:
- 内容缓存:模块数据会被缓存成数组,更新内容时自动失效——但如果直接改了数据库,缓存不会失效,前台永远是旧值
- 模板编译缓存:
cache/下的编译产物,改 .html 模板后需重新编译 - 标签查询缓存:部分列表标签带 query 缓存,条数、条件变了要清
- 浏览器 / CDN 缓存:这个最容易被忽略,明明后台清了缓存,其实卡在 CDN 边缘节点
标准排查顺序:后台「系统 → 缓存管理 → 更新缓存」 → 强制刷新浏览器(Ctrl+F5) → 如果挂了 CDN 再刷 CDN 缓存。三步走完还没变,才回头怀疑模板写错了。
五、直接改数据库的坑
用 phpMyAdmin 或脚本批量改内容表,改完必须手动清缓存:
# 删除编译与数据缓存(保留目录结构)
rm -rf cache/template/*
rm -rf cache/data/*
注意只删子目录内容,别把 cache/ 整个删了——里面可能有站点标识文件,删掉要重新生成,某些版本会因此报错。
六、几个实际写法
<!-- 带条件的列表 -->
{dr_news_list module=news catid=$catid num=8 order=updatetime_desc}
<a href="{$t.url}">{$t.title}</a>
{/dr_news_list}
<!-- 判断有无缩略图 -->
{if $t.thumb}
<img src="{$t.thumb}">
{else}
<img src="/static/images/default.jpg">
{/if}
<!-- 当前栏目高亮 -->
<li class="{if $catid==$t.catid}active{/if}">
条件判断用 {if} 而不是标签参数里的三元,可读性好得多。
下一篇讲伪静态——迅睿的重写规则和 Z-Blog 差得挺远,s= 那套参数怎么藏进路径里,规则写错会 404 还是 500。