模板标签速查:从 arclist 到 pagelist
用一组常用标签完成首页、列表、详情和搜索页的数据渲染。
DJM CMS 的模板由标签组成。自闭合标签形如 {djm:config name="site.name"/},循环标签用开始与结束标签包住 HTML。循环内部使用 [field:...] 取值,循环外部读取当前实体用 {djm:field.../}。
最常用的六个标签
导航
{djm:nav mode="tree" depth="2" row="100"}{/djm:nav}
mode="tree" 输出带二级菜单和无障碍展开按钮的导航;mode="flat" 才按标签体逐条渲染。
内容列表
{djm:arclist row="6" flag="recommend" orderby="pubdate" orderdir="desc"}
<article>
<h2><a href="[field:url/]">[field:title/]</a></h2>
<p>[field:summary/]</p>
<time>{djm:date field="published_at" format="Y-m-d"/}</time>
</article>
{/djm:arclist}
栏目内列表与分页
{djm:list row="12" paginate="1"}
<a href="[field:url/]">[field:title/]</a>
{/djm:list}
{djm:pagelist pagesize="7"/}
详情字段
<h1>{djm:field.title/}</h1>
<div class="prose">{djm:field.ext.body raw="1"/}</div>
只有模型字段类型为 rich_text 且经过服务端白名单清洗的内容,才会在 raw="1" 时按 HTML 输出。
条件与包含
{djm:if condition="site.logo != ''"}
<img src="{djm:config name="site.logo"/}" alt="">
{/djm:if}
{djm:include file="inc/footer.html"/}
作用域规则
{djm:field.../}读取当前页面实体,例如栏目名、内容标题。[field:.../]只读取最近一层循环的当前行。raw="1"只用于可信富文本,普通标题和用户输入保持转义。
安全边界
模板输出默认执行 HTML、属性和 URL 转义;include 禁止绝对路径、越界与循环引用。标签属性、默认值和可用排序值都有编译期校验,写错会在启用主题时直接报错,而不是等到线上页面空白。
调试建议
先在后台主题编辑器里改,保存时会自动校验;确认无误后再导出主题包。页面缓存开启时,主题文件变化会自动失效,但反向代理层仍可能缓存旧页面,调试时记得绕过 CDN 或清缓存。
讨论
发表评论