迅睿CMS 模板标签:{dr_} 语法怎么走,为什么改了数据前台没变

· 迅睿CMS · 阅读 19
摘要

迅睿前台模板里的 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 的自动跟着变。

四、改了数据前台没变:四层缓存

这是迅睿新手提问频率最高的问题。缓存有四层,必须逐层排查:

  1. 内容缓存:模块数据会被缓存成数组,更新内容时自动失效——但如果直接改了数据库,缓存不会失效,前台永远是旧值
  2. 模板编译缓存:cache/下的编译产物,改 .html 模板后需重新编译
  3. 标签查询缓存:部分列表标签带 query 缓存,条数、条件变了要清
  4. 浏览器 / 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。