文档详情标签`archiveDetail`如何获取并显示单篇文档的完整内容?

在安企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>

文档的发布和更新时间(CreatedTimeUpdatedTime)是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 %}