标签本身不难,难的是知道每种页面该放哪些。下面按页面类型给出可直接套用的骨架,参数说明见标签手册。
首页
首页没有“当前栏目”,arclist 建议用 flag、tag 或 typeid 限定范围,否则取到的是全站内容。
<header>
{djm:nav mode="tree" depth="2" row="100"}{/djm:nav}
</header>
{djm:arclist row="6" flag="recommend" orderby="published_at" orderdir="desc"}
<article>
<h2><a href="[field:url/]">[field:title/]</a></h2>
<p>[field:summary/]</p>
</article>
{/djm:arclist}
{djm:hotlist row="5" orderby="views" startday="30"}
<a href="[field:url/]">[field:title/]</a>
{/djm:hotlist}
列表页
列表页用 list 读取当前栏目,paginate="1" 创建分页上下文,pagelist 必须和它成对出现。
<div class="crumbs">{djm:crumbs separator=" / "/}</div>
<h1>{djm:field.name/}</h1>
{djm:list row="12" paginate="1" orderby="published_at" orderdir="desc"}
<a href="[field:url/]">[field:title/]</a>
{/djm:list}
{djm:pagelist pagesize="7" prevtext="上一页" nexttext="下一页"/}
一页里不要放两个 paginate="1" 的循环,分页上下文会互相覆盖。需要侧栏“最新内容”时用 arclist 且不要开 paginate。
详情页
详情页的字段直接用 {djm:field.},正文走 raw="1",底部依次接上下篇、相关内容和评论。
<h1>{djm:field.title/}</h1>
<time>{djm:date field="published_at" format="Y-m-d"/}</time>
<div class="prose">{djm:field.ext.body raw="1"}</div>
{djm:prenext type="pre" prenone="已经是第一篇"/}
{djm:prenext type="next" nextnone="已经是最后一篇"/}
{djm:related row="6" exclude="1"}
<a href="[field:url/]">[field:title/]</a>
{/djm:related}
{djm:comments row="20"}
<p>[field:body/]</p>
{/djm:comments}
{djm:commentform/}
搜索页
<p>关键词:{djm:var.search.keyword/}</p>
{djm:search row="15" highlight="1" paginate="1" none="没有找到相关内容"}
<a href="[field:url/]">[field:title/]</a>
{/djm:search}
{djm:pagelist/}
highlight="1" 会把命中的词包进 <mark>,标题要输出到属性时改用 title_plain,避免标签混进 alt。
栏目单页
在后台给栏目配置了正文或自定义字段时,单页模板可以直接读取:
<h1>{djm:field.intro_title/}</h1>
<div class="prose">{djm:var.page_content raw="1"}</div>
自定义字段的富文本同样按已清洗 HTML 输出,图片会自动补 /storage/ 前缀。
讨论