模板标签速查:从 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 或清缓存。

讨论

发表评论