在AnQiCMS中,内容模型的自定义字段为我们的网站内容管理带来了极大的灵活性,它允许我们根据不同业务需求,为文章、产品、活动等内容类型添加独有的属性。但仅仅在后台创建这些字段是不够的,如何将它们灵活地呈现在网站前端,让访客看到这些定制化的信息,才是内容运营的关键。
接下来,我们将深入探讨AnQiCMS的内容模型自定义字段如何在前端模板中被灵活调用和显示,帮助您充分利用这一强大功能。
搭建个性化内容的基石:自定义字段的创建
在AnQiCMS中,自定义字段的魅力在于其高度的定制性。它们不是固定不变的,而是您根据实际业务逻辑来定义的。通常,这些字段在“内容管理”模块下的“内容模型”中进行创建和管理。
当您进入某个内容模型(例如“文章模型”或“产品模型”)进行编辑时,会看到一个“内容模型自定义字段”的区域。在这里,您可以添加新的字段,并为它们设置关键属性:
- 参数名(显示名称):这是您在后台管理界面看到的字段名称,方便识别。
- 调用字段(模板中的变量名):这是最核心的属性,它决定了您在前端模板中将如何引用这个自定义字段。请务必使用简洁、有意义的英文字母作为调用字段,例如
author、productPrice、eventDate等。 - 字段类型:AnQiCMS提供了多种字段类型,如单行文本、数字、多行文本、单项选择、多项选择和下拉选择。选择合适的类型,有助于确保数据输入的规范性和前端显示的一致性。
- 默认值与是否必填:您可以为字段设置默认值,并在需要时将其标记为必填项。
理解“调用字段”的重要性是成功在前端调用自定义字段的第一步,它是连接后台数据与前端模板的桥梁。
在前端模板中点亮自定义字段:灵活的调用方式
AnQiCMS的模板系统基于Django模板引擎语法,提供了直观且强大的方式来调用各种数据,包括我们精心定义的自定义字段。无论是显示单篇文章/产品的详情,还是在列表页中展示概要信息,都有对应的调用方法。
1. 在详情页中直接调用单个自定义字段
当您处于某个文档(文章或产品)的详情页面时,AnQiCMS会自动将当前文档的所有数据(包括自定义字段)加载到一个名为archive的变量中。此时,调用单个自定义字段最直接的方式就是通过点号(.)操作符,结合您在后台设置的“调用字段”名称。
例如,如果您为“产品模型”添加了一个名为“产品价格”的自定义字段,其“调用字段”设置为productPrice,那么在产品详情页的模板中,您可以这样显示它的价格:
<p>产品价格:{{archive.productPrice}} 元</p>
此外,AnQiCMS也提供了archiveDetail标签,它允许更明确地获取单个字段值,甚至可以指定获取特定ID文档的字段。例如:
{# 直接获取当前文档的作者自定义字段 #}
<p>作者:{% archiveDetail with name="author" %}</p>
{# 如果需要获取ID为10的文档的产品价格 #}
<p>其他产品价格:{% archiveDetail with name="productPrice" id="10" %} 元</p>
这种方式简洁明了,适合那些您确切知道要显示哪个自定义字段,并且在页面布局中有固定位置的场景。
2. 动态循环展示所有自定义字段
有些时候,您可能希望在详情页中展示所有已定义的自定义字段,或者字段的名称和数量可能会根据不同的文档而变化。这时,archiveParams标签就显得尤为强大。它能获取当前文档或指定文档的所有自定义参数,并以数组的形式返回,方便我们通过循环来动态展示。
例如,在一个产品详情页,您可能想把所有产品参数(如颜色、尺寸、材质等,这些都是自定义字段)以列表形式展示出来:
<h3>产品参数:</h3>
<ul>
{% archiveParams params %}
{% for item in params %}
<li>
<span>{{item.Name}}:</span> {# item.Name 会显示后台设置的“参数名” #}
<span>{{item.Value}}</span> {# item.Value 会显示您输入的内容 #}
</li>
{% endfor %}
{% endarchiveParams %}
</ul>
通过这种方式,即使您在后台新增或修改了自定义字段,前端模板也无需改动,就能自动适配并显示最新的参数列表。如果您只想显示特定名称的字段,或者排除某些字段,也可以在for循环内使用if条件判断。
3. 在列表页中展示自定义字段的摘要信息
在文章列表、产品列表等页面,我们也常常需要展示自定义字段的摘要信息。例如,在产品列表中显示产品的简要描述或促销标签。
当使用archiveList标签获取文档列表时,循环变量(通常是item)同样包含了每个文档的自定义字段。您可以直接通过点号操作符访问它们:
”`twig {% archiveList archives with type=“page” limit=“10” %}
{% for item in archives %}
<div class="product-card">
<img src="{{item.Logo}}" alt="{{item.Title}}">
<h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
{# 直接在列表