在 AnQiCMS 中,展示单个文档的详细内容是网站构建的核心需求之一。无论是文章详情页、产品详情页,还是其他自定义类型的内容展示,我们都需要一种灵活高效的方式来获取并呈现文档的标题、正文以及根据业务需求定义的自定义字段。archiveDetail 标签正是为此而生,它能帮助您轻松实现这一目标。
深入了解 archiveDetail 标签:获取特定文档的核心信息
archiveDetail 标签主要用于获取单个文档的详细数据。当您需要在一个页面中完整呈现某篇文档的所有信息时,它将是您的得力助手。这个标签的强大之处在于,它不仅能够获取文档的默认字段(如标题、内容),还能轻松调取您在后台“内容模型”中为该文档类型自定义的各种字段。
它的基本使用语法是:
{% archiveDetail 变量名称 with name="字段名称" id="文档ID" %}
其中,变量名称 是可选的,如果设置了,您可以将获取到的数据赋值给这个变量,之后通过 {{变量名称}} 来引用;如果不设置,标签会尝试直接输出指定字段的值。
- 指定文档: 通常情况下,
archiveDetail在文档详情页会自动识别当前页面的文档。但如果您需要获取特定ID的文档信息,可以加上id="文档ID"参数,例如id="123"。此外,也可以通过token="文档URL别名"参数来指定文档。 - 多站点支持: 如果您的 AnQiCMS 部署了多个站点,并且需要跨站点获取文档数据,可以使用
siteId="站点ID"参数。
获取文档核心信息:标题与内容
要显示文档的标题和内容,您只需要在 name 参数中指定对应的字段名即可。
获取文档标题 (
Title): 文档标题是内容的核心标识。使用name="Title"即可获取。{# 获取当前页面文档的标题 #} <h1>{% archiveDetail with name="Title" %}</h1> {# 获取ID为1的文档标题,并赋值给archiveTitle变量 #} {% archiveDetail archiveTitle with name="Title" id="1" %} <p>指定文档标题:{{ archiveTitle }}</p>获取文档内容 (
Content): 文档内容通常包含丰富的 HTML 结构,包括文本、图片、链接等。获取时需要注意一个重要的过滤器:|safe。{# 获取当前页面文档的内容,并使用|safe过滤器防止HTML转义 #} <div class="article-content"> {% archiveDetail articleContent with name="Content" %} {{ articleContent|safe }} </div> {# 如果您的内容包含Markdown语法,可以使用render=true进行转换 #} <div class="article-content"> {% archiveDetail articleContent with name="Content" render=true %} {{ articleContent|safe }} </div> {# 如果您使用了图片懒加载插件,可以指定lazy="data-src"来适配 #} <div class="article-content"> {% archiveDetail articleContent with name="Content" lazy="data-src" %} {{ articleContent|safe }} </div>特别提醒:
Content字段通常存储的是带有 HTML 标签的富文本内容。为了让浏览器正确解析并显示这些 HTML 结构,您必须在输出时使用|safe过滤器(例如{{ articleContent|safe }})。否则,HTML 标签将作为纯文本显示在页面上,影响阅读体验。
深入自定义字段:灵活展示个性化内容
AnQiCMS 强大的“内容模型”功能允许您为不同类型的文档添加各种自定义字段,以满足特定的业务需求,例如产品的价格、文章的作者、视频的时长等。archiveDetail 标签也完全支持获取这些自定义字段。
获取特定自定义字段: 如果您知道自定义字段的“调用字段”名称(在后台内容模型中定义),可以直接通过
name="自定义字段名"来获取其值。假设您在内容模型中定义了一个名为
author的自定义字段:{# 获取当前文档的作者信息 #} <p>作者:{% archiveDetail with name="author" %}</p> {# 获取ID为10的文档的产品价格字段 #} <p>产品价格:{% archiveDetail with name="price" id="10" %}</p>循环展示所有自定义字段 (
archiveParams): 有时候,您可能希望将文档的所有自定义字段都遍历展示出来,尤其是在产品参数列表等场景。此时,可以使用archiveParams标签来获取文档的所有自定义参数,然后通过for循环进行展示。<div class="custom-params"> <h3>更多参数:</h3> {% archiveParams params %} {% for item in params %} <p> <span>{{ item.Name }}:</span> <span>{{ item.Value }}</span> </p> {% endfor %} {% endarchiveParams %} </div>archiveParams标签会返回一个包含所有自定义字段的数组(或映射,取决于sorted参数)。item.Name是自定义字段的显示名称,item.Value则是其对应的值。
综合示例:构建一个完整的文档详情页
将上述元素整合起来,一个典型的文档详情页模板片段可能如下所示:
”`twig <!DOCTYPE html>
<meta charset="UTF-8">
<title>{% archiveDetail with name="Title" siteName=true %}</title>
<meta name="description" content="{% archiveDetail with name="Description" %}">
<meta name="keywords" content="{% archiveDetail with name="Keywords" %}">
<link rel="stylesheet" href="{% system with name="TemplateUrl" %}/css/style.css">
<header>
<!-- 导航、Logo等页面头部元素 -->
</header>
<main class="container">
<article class="document-detail">
<h1 class="document-title">{% archiveDetail with name="Title" %}</h1>
<div class="document-meta">
<span>分类:<a href="{% categoryDetail with name='Link' %}">{% categoryDetail with name='Title' %}</a></span>
<span>发布日期:{% archiveDetail with name="CreatedTime" format="2006-01-02" %}</span>
<span>浏览量:{% archiveDetail with name="Views" %}</span>
{% archiveDetail author with name="author" %}{# 假设有一个自定义字段叫 author #}
{% if author %}<span class="document-author">作者:{{ author }}</span>{% endif %}
</div>
<div class="document-description">
<p>{% archiveDetail with name="Description" %}</p>
</div>
<div class="document-content">
{% archiveDetail documentContent with name