在安企CMS中,展示单篇文档的完整内容是网站运营的基础。无论您是发布一篇新闻文章、一个产品详情,还是一项服务介绍,核心都在于如何高效且准确地将后台录入的数据呈现在用户面前。这正是archiveDetail标签及其相关机制发挥作用的地方。
理解archiveDetail:获取单篇文档的核心
当我们谈论获取单篇文档的完整内容时,首先要明确一点:当您访问一个文档的详情页面(例如你的域名/article/123.html),安企CMS已经非常智能地将当前文档的所有数据加载到一个名为archive的全局变量中。这意味着,在文档详情页的模板里,您通常可以直接通过 {{archive.字段名}} 的形式来快速、简洁地调用文档的各项信息,例如 {{archive.Title}} 会显示文档标题,{{archive.Content}} 则会展示文档正文。
然而,archiveDetail标签提供了更灵活的控制方式。它允许您不仅获取当前页面的文档详情,还能够根据需要,明确指定通过文档ID(id)或URL别名(token)来获取任意一篇文档的内容。这种灵活性在某些需要引用或对比其他文档内容的场景下尤为实用。其基本用法是 {% archiveDetail 变量名称 with name="字段名称" id="文档ID" %},或者,如果您只是想直接输出某个字段而不定义变量,也可以省略变量名称。
关键字段与实用调用
要充分利用archiveDetail标签,了解其支持的各项字段至关重要。
首先是基础文本信息。比如,要显示文档的标题,可以使用{{archive.Title}}或{% archiveDetail with name="Title" %}。同样,文档的链接 (Link)、描述 (Description)、关键词 (Keywords) 以及浏览量 (Views) 等都可以通过类似的方式轻松获取。例如,在页面上显示当前文档的浏览量:
<p>浏览量:{{archive.Views}} 次</p>
接下来是图片资源。文档的封面图(Logo)、缩略图(Thumb)都是常见的展示元素。如果文档配置了多张封面图片(Images),它会返回一个数组,这时候就需要通过for循环来遍历并显示:
<img src="{{archive.Logo}}" alt="{{archive.Title}}" />
{% if archive.Images %}
<div class="gallery">
{% for imgUrl in archive.Images %}
<img src="{{imgUrl}}" alt="图片描述" />
{% endfor %}
</div>
{% endif %}
文档的核心内容字段Content是展示文章或产品详情的关键。需要特别注意的是,由于内容通常包含富文本编辑器生成的HTML代码,为了让浏览器正确解析并显示样式,务必配合|safe过滤器使用,以防止HTML被转义而显示为纯文本。此外,如果您的内容是Markdown格式,您还可以通过render=true参数让系统自动将其渲染为HTML。
<div class="article-content">
{{archive.Content|safe}}
{# 如果内容是Markdown格式,且想强制渲染: #}
{# {{archive.Content|render=true|safe}} #}
{# 如果内容是Markdown格式,但想获取原始Markdown文本: #}
{# {{archive.Content|render=false|safe}} #}
</div>
文档的发布和更新时间(CreatedTime和UpdatedTime)是Unix时间戳格式,为了便于阅读,您需要使用stampToDate函数进行格式化。例如,将发布时间格式化为“年-月-日”:
<span>发布时间:{{stampToDate(archive.CreatedTime, "2006-01-02")}}</span>
安企CMS的灵活之处还在于其内容模型自定义字段。如果您在后台为某个内容模型添加了自定义字段,比如“作者”(author)或“产品型号”(modelNumber),您可以直接通过{{archive.author}}或{{archive.modelNumber}}来调用它们。如果需要遍历所有自定义字段,archiveParams标签将是您的好帮手,它能将所有自定义字段以数组形式返回,方便循环展示:
{# 直接调用自定义字段 #}
<p>作者:{{archive.author}}</p>
{# 遍历所有自定义字段 #}
{% archiveParams params %}
<ul class="custom-fields">
{% for item in params %}
<li><strong>{{item.Name}}:</strong>{{item.Value}}</li>
{% endfor %}
</ul>
{% endarchiveParams %}
当您的网站是多站点架构时,siteId参数则允许您跨站点调用文档数据,这为多品牌或多语言网站的内容整合提供了便利。
实际应用场景示例
场景一:标准文章详情页 在博客或新闻网站中,一个典型的文章详情页可能包含标题、分类链接、发布时间、标签、浏览量和正文。以下是一个简洁的模板片段,展示如何组合这些信息:
<article class="article-detail">
<h1 class="article-title">{{archive.Title}}</h1>
<div class="article-meta">
<a href="{{archive.Category.Link}}" class="category-link">{{archive.Category.Title}}</a>
<span class="publish-time">发布于:{{stampToDate(archive.CreatedTime, "2006-01-02")}}</span>
<span class="views">阅读量:{{archive.Views}} 次</span>
<div class="tags">
{% tagList tags with itemId=archive.Id limit="5" %}
{% for tag in tags %}
<a href="{{tag.Link}}">{{tag.Title}}</a>
{% endfor %}
{% endtagList %}
</div>
</div>
<div class="article-content">
{{archive.Content|safe}}
</div>
</article>
场景二:产品详情页 对于电商或产品展示网站,产品详情页可能更侧重于产品图片、名称、详细参数和说明。这里结合了自定义字段和图片展示:
”`twig
<div class="product-images">
<img src="{{archive.Logo}}" alt="{{archive.Title}}" class="main-product-image" />
{% if archive.Images %}
<div class="thumbnail-gallery">
{% for img in archive.Images %}