内容管理系统的核心价值之一,在于能够灵活地定义和呈现各种类型的内容。对于安企CMS(AnQiCMS)的用户而言,无论是展示一篇详细的文章、一个产品页面,还是一个自定义的数据条目,如何高效地获取其完整内容以及所有关联字段,是进行前端模板开发和内容呈现的关键。
今天,我们就来深入探讨在AnQiCMS中,如何通过模板标签这一“万能钥匙”,轻松驾驭单个文档内容的获取与显示。
获取文档核心内容:archiveDetail 标签的妙用
在AnQiCMS中,archiveDetail 标签是获取单个文档详细信息的入口。这个标签非常灵活,既可以直接输出某个字段的值,也可以将整个文档对象赋值给一个变量,以便进行更复杂的处理。
通常,在文档详情页面,系统会自动识别当前文档,我们无需额外指定ID。但如果你需要在其他页面调用某个特定文档,可以通过 id 参数来精确获取。例如,要获取ID为10的文档标题,可以这样写:{% archiveDetail with name="Title" id="10" %}。
以下是一些常用字段的获取与显示方法:
- 文档标题 (
Title): 这是文档最核心的信息之一。在文档详情页,你通常可以直接通过{{ archive.Title }}来显示。如果需要更通用的写法,或在其他页面调用,可以使用{% archiveDetail with name="Title" %}。 - 文档内容 (
Content): 文档主体内容往往包含丰富的文本、图片,甚至可能是HTML或Markdown格式。为了确保内容能够正确解析并显示,特别是当内容包含HTML标签时,务必使用|safe过滤器来防止内容被转义。如果文档内容是通过Markdown编辑器编写的,并且你希望在前端自动将其转换为HTML,可以在标签中添加render=true参数:
如果你不需要渲染Markdown,或者内容本身就是纯HTML,可以省略{# 获取并安全显示文档内容,如果内容是Markdown格式,则自动渲染为HTML #} {% archiveDetail documentContent with name="Content" render=true %} {{ documentContent|safe }}render=true。 - 文档简介 (
Description): 简洁的文档摘要,常用于列表页或SEO描述。获取方式与标题类似:{% archiveDetail with name="Description" %}。 - 文档链接 (
Link): 每个文档都有一个唯一的访问地址。获取链接可以用于构建内部导航或分享:{% archiveDetail with name="Link" %}。 - 发布时间 (
CreatedTime): 内容的发布时间戳,通常需要格式化成易读的日期和时间。AnQiCMS提供了stampToDate函数来处理:
你可以根据Go语言的时间格式化规则自定义输出格式,例如{# 获取发布时间戳并格式化为“年-月-日” #} {% archiveDetail createdTime with name="CreatedTime" %} 发布日期:{{ stampToDate(createdTime, "2006-01-02") }}"2006年01月02日 15:04"。 - 缩略图 (
Thumb) 和封面首图 (Logo): 图片是吸引用户的重要元素。这些字段通常返回图片URL,可以直接用于<img>标签:{# 显示文档缩略图 #} <img src="{% archiveDetail with name="Thumb" %}" alt="{% archiveDetail with name="Title" %}" /> - 浏览量 (
Views): 展示文档的受欢迎程度:{% archiveDetail with name="Views" %}。
深入挖掘:获取自定义字段 (archiveParams) 的所有信息
AnQiCMS最强大的特点之一是其灵活的内容模型,允许用户根据业务需求自定义文档字段。例如,一个产品文档可能有“价格”、“库存”、“品牌”等字段,而一篇技术文章可能有“作者”、“来源”、“标签”等。archiveParams 标签就是用来获取这些自定义字段的。
archiveParams 标签可以将文档的所有自定义字段作为一个集合获取。你可以通过 sorted=true 参数(默认值)获取一个有序的数组,方便遍历;或者使用 sorted=false 获取一个无序的Map对象,通过字段的“调用字段”名称直接访问。
1. 遍历所有自定义字段:
如果你想在页面上显示文档所有的自定义字段及其值,可以使用 archiveParams 标签获取一个有序数组,并通过 for 循环进行遍历。每个循环项都会包含 Name(参数名称,即后台显示的中文名)和 Value(参数值)。
{# 获取当前文档的所有自定义参数,并遍历显示 #}
{% archiveParams params %}
<div class="document-parameters">
{% for item in params %}
<p>
<span>{{ item.Name }}:</span>
<span>{{ item.Value }}</span>
</p>
{% endfor %}
</div>
{% endarchiveParams %}
2. 直接访问特定自定义字段:
如果你只需要获取某个特定的自定义字段(例如,一个名为 author 的字段),而不想遍历所有字段,通常有两种便捷方式:
直接通过
archive对象访问(推荐): 对于在内容模型中定义的自定义字段,它们很多时候会直接挂载到archive文档对象上。你可以在文档详情页直接使用{{ archive.自定义调用字段名 }}的形式来获取。{# 假设你在后台定义了一个调用字段名为 'author' 的自定义字段 #} <p>作者:{{ archive.author }}</p> {# 假设有一个调用字段名为 'product_warranty' 的自定义字段 #} <p>产品保修:{{ archive.product_warranty }}</p>这种方式简洁直观,是获取特定自定义字段的首选方法。
通过
archiveParams标签以Map形式访问: 如果直接通过archive对象无法访问到(这种情况较少,通常发生在较复杂的自定义类型字段),或者你需要确保该字段确实是作为archiveParams存储的,可以使用sorted=false获取Map,并通过{{ params.你的调用字段名.Value }}来访问。{# 获取无序的自定义参数Map,并直接访问名为 'author' 的字段值 #} {% archiveParams params with sorted=false %} <p>作者:{{ params.author.Value }}</p> {% endarchiveParams %}
重要提示:
- 自定义字段的“调用字段”名称(如上述例子中的
author或product_warranty)必须与你在后台“内容模型”中设置的名称完全一致(区分大小写),才能正确获取其值。 - 如果自定义字段的值本身是HTML代码,同样需要使用
|safe过滤器来确保正确显示,例如{{ archive.my_html_field|safe }}。
综合应用示例
让我们以一个产品详情页面为例,展示如何将基础信息和自定义字段结合起来:
”`twig
{# 产品封面图 #}
<div class="product-image">
<img src="{% archiveDetail with name='Logo' %}" alt="{% archiveDetail with name='Title' %}" />
</div>
<div class="product-info">
{# 产品标题 #}
<h1>{% archiveDetail with name="Title" %}</h1>
{# 产品简介 #}
<p class="description">{% archiveDetail with name="Description" %}</p>
{# 获取并显示自定义产品参数 #}
<div class="product-specs">
<h3>产品参数</h3>
{% archiveParams params %}
{% for item