在 AnQiCMS 模板中灵活地获取并显示自定义内容模型的扩展字段,是实现网站个性化内容展示的关键。AnQiCMS 强大的内容模型定制能力,让我们能够根据实际业务需求,为文章、产品等内容添加各种独特的属性,而如何在前端模板中将这些自定义数据精彩呈现,正是我们今天要深入探讨的主题。
AnQiCMS 内容模型的灵活性
AnQiCMS 作为一个基于 Go 语言开发的企业级内容管理系统,其核心亮点之一便是”灵活的内容模型”。这意味着我们不仅仅局限于传统的”标题”、”内容”等固定字段,而是可以根据具体业务场景,在后台为不同的内容类型(如:文章、产品、活动等)创建专属的扩展字段。
举例来说,如果你运营一个电商网站,在产品模型中可能需要添加“产品 SKU”、“品牌”、“库存数量”、“产品规格”等字段;如果是博客文章,则可能需要“作者简介”、“阅读时长”、“参考资料”等字段。这些在后台“内容管理”下的“内容模型”中创建的字段,都统称为自定义内容模型的扩展字段。在创建这些字段时,我们会设置一个“参数名”(供后台显示)和一个“调用字段”(供模板调用),后者正是我们在模板中获取数据的重要标识。
获取自定义字段的核心思路
在 AnQiCMS 的模板体系中,无论您是在查看单个文档详情页,还是在列表页循环展示内容,获取这些自定义扩展字段的核心思路都是一致的:它们被视为文档(或内容)对象的一部分。AnQiCMS 提供了功能强大的模板标签,让我们可以像访问内置字段一样,轻松地访问这些自定义字段。
在模板中获取并显示单个扩展字段
当你明确知道要显示哪个自定义扩展字段时,archiveDetail 标签是您的首选。这个标签主要用于在文档详情页获取当前文档的详细信息,当然也可以通过指定 ID 或 URL 别名来获取其他文档的详情。
要获取一个特定的自定义字段,您需要使用 name 参数,并将其值设置为您在后台“内容模型”中定义的该字段的“调用字段”名称。
例如,如果您在产品模型中自定义了一个名为“产品 SKU”的字段,其“调用字段”为 productSku,那么在产品详情页的模板中,您可以这样获取并显示它:
<p>产品 SKU:{% archiveDetail with name="productSku" %}</p>
如果想将其赋值给一个变量以便后续处理,可以这样做:
{% archiveDetail currentProductSku with name="productSku" %}
<p>当前产品的 SKU 是:{{ currentProductSku }}</p>
这样,模板解析时就会将对应产品的 SKU 值替换到 {{ currentProductSku }} 的位置。
遍历所有扩展字段
有时候,我们可能不确定某个内容模型具体有哪些自定义字段,或者希望动态地展示所有已定义的扩展字段及其值,例如在产品详情页统一列出所有产品参数。这时,archiveParams 标签就能派上大用场了。
archiveParams 标签允许我们获取当前文档(或指定文档)的所有自定义参数,并以数组或无序 Map 对象的形式返回。通常,我们倾向于获取一个固定排序的数组对象,这样就可以通过 for 循环轻松遍历并展示。
下面是一个在文档详情页遍历并显示所有自定义字段的示例:
<h3>产品参数:</h3>
<ul>
{% archiveParams params %}
{% for item in params %}
<li>
<strong>{{ item.Name }}:</strong>
<span>{{ item.Value }}</span>
</li>
{% endfor %}
{% endarchiveParams %}
</ul>
在这个例子中:
{% archiveParams params %}将当前文档的所有自定义字段数据赋值给params变量。{% for item in params %}循环遍历params数组。{{ item.Name }}会输出该自定义字段在后台设置的“参数名”(例如“产品 SKU”)。{{ item.Value }}会输出该自定义字段的具体值(例如“AQ-001”)。
通过这种方式,即使您未来在后台为内容模型添加了新的自定义字段,前端模板也无需修改,就能自动同步显示这些新字段及其值,大大提升了模板的可维护性和灵活性。
如果您希望获取无序的 Map 对象(例如,当您需要通过字段的“调用字段”来直接访问其值时),可以在 archiveParams 标签中添加 sorted=false 参数。
{% archiveParams params with sorted=false %}
<div>
<span>作者:</span>
<span>{{ params.author.Value }}</span>
</div>
{% endarchiveParams %}
处理特殊字段类型
自定义字段的类型多种多样,例如单行文本、数字、多行文本、单项选择、多项选择、下拉选择等。其中,富文本编辑器或 Markdown 格式的字段,以及图片组字段,在前端显示时需要一些额外的处理。
富文本/Markdown 内容的渲染
如果您的自定义字段存储的是包含 HTML 或 Markdown 语法的富文本内容(例如“产品介绍”字段可能包含加粗、图片等格式),直接输出 {{ item.Value }} 可能会因为模板的自动转义机制而导致 HTML 标签被显示为纯文本。
此时,我们需要使用 safe 过滤器来告诉模板这些内容是安全的 HTML,不应进行转义:
{% archiveDetail productDescription with name="productDescription" %}
<div class="product-description">
{{ productDescription|safe }}
</div>
如果您的自定义字段内容是 Markdown 格式,您还需要额外使用 render 过滤器将其转换为 HTML,然后再使用 safe 过滤器:
{% archiveDetail markdownContent with name="markdownContent" %}
<div class="markdown-output">
{{ markdownContent|render|safe }}
</div>
图片组或多选字段的显示
对于图片组(多个图片 URL)或多项选择(多个值)这类自定义字段,它们的值通常以数组的形式存储。在模板中显示时,您需要再次使用 for 循环来遍历这些子项。
例如,如果您定义了一个“产品图集”字段,其“调用字段”为 productImages:
{% archiveDetail productImages with name="productImages" %}
<div class="product-gallery">
{% for imageUrl in productImages %}
<img src="{{ imageUrl }}" alt="产品图片" />
{% endfor %}
</div>
这个例子展示了如何遍历 productImages 数组中的每个图片 URL,并将其显示为 <img> 标签。
总结
AnQiCMS 的自定义内容模型及其灵活的模板标签体系,为我们打造高度个性化和功能丰富的网站提供了坚实基础。无论是精确获取单个扩展字段,还是动态遍历所有自定义参数,亦或是处理特殊内容类型,AnQiCMS 都提供了直观且强大的方法。掌握这些技巧,您就能让网站内容在前端焕发活力,更好地满足用户需求和业务目标。
常见问题 (FAQ)
**Q1: