在文档详情页,如何调用并展示文章的自定义模型字段内容?

安企CMS(AnQiCMS)的灵活内容模型是一个非常强大的工具,它允许我们根据网站的实际需求,为不同类型的内容(比如文章、产品、活动等)添加专属的字段。这意味着我们的内容不再局限于固定的标题、简介和内容,而是可以承载更多元化、结构化的信息。那么,在文档的详情页面,我们究竟该如何调用并展示这些自定义模型字段的内容呢?

接下来,我们就一起探索安企CMS提供的几种灵活方式。

理解自定义模型字段的创建与作用

在深入模板调用之前,我们有必要简要回顾一下自定义模型字段的创建过程。在安企CMS后台,您可以通过访问 内容管理内容模型 来管理和创建内容模型。无论是系统默认的“文章模型”和“产品模型”,还是您自己新增的模型,都可以为其添加自定义字段。

在添加字段时,有几个关键点需要留意:

  1. 参数名(显示名称):这是在后台编辑文档时,您看到的字段名称,比如“文章作者”、“产品型号”。
  2. 调用字段(英文名称):这是在模板中调用该字段内容时使用的唯一标识,它必须是英文字母。例如,如果您设置了“文章作者”的调用字段为 author,那么在模板中,您就会使用 author 来获取其值。
  3. 字段类型:安企CMS支持多种字段类型,如单行文本、数字、多行文本、单项选择、多项选择和下拉选择等。不同的字段类型在前端展示时可能需要不同的处理方式。

当您在后台编辑一篇文档时,如果该文档所属的分类关联了某个内容模型,那么这个内容模型下定义的所有自定义字段都会在“其他参数”部分显示出来,供您填写相应的内容。确保这些字段都已填写并保存,是前端能够成功调用的前提。

在文档详情页调用自定义模型字段内容

一旦自定义模型字段的内容在后台录入完毕,我们就可以在文档详情页面对应的模板文件中(通常是 template/您的模板目录/模型表名/detail.htmldetail-{文档ID}.html),通过以下几种方式来调用和展示它们。

1. 最直接的方式:通过 archive 对象属性调用

这是最常用也最简洁的方式,适用于大多数自定义字段。在文档详情页的模板中,安企CMS会自动将当前文档的所有数据封装在一个名为 archive 的对象中。这个对象包含了文档的默认字段(如 TitleContentDescription 等),也包含了您自定义的所有模型字段。

您只需要使用点语法(.)就可以直接访问自定义字段的内容。例如,如果您有一个名为 author 的调用字段:

<p>作者:{{ archive.author }}</p>

如果您的自定义字段类型是富文本编辑器(多行文本且允许HTML),为了确保HTML内容能够正确解析并显示样式,您需要使用 |safe 过滤器:

<div class="product-introduction">{{ archive.introduction|safe }}</div>

这种方法简单明了,强烈推荐作为首选。

2. 使用 archiveDetail 标签精确调用

archiveDetail 标签是专门用于获取文档详情数据的,它除了能获取文档的内置字段外,也能用来获取自定义模型字段的内容。这种方式在某些需要更精细控制或者只获取特定字段值而不想引入整个 archive 对象的情况下会比较有用。

假设您有一个自定义调用字段 product_dimensions(产品尺寸):

<p>产品尺寸:{% archiveDetail with name="product_dimensions" %}</p>

您也可以将获取到的值赋给一个变量,再进行处理:

{% archiveDetail dimensions_value with name="product_dimensions" %}
<p>产品的具体尺寸是:{{ dimensions_value }}</p>

对于一些特殊字段,比如自定义的组图字段(例如 gallery_images),它存储的是一个图片URL列表。您可以通过 archiveDetail 标签获取后,再进行循环展示:

{% archiveDetail gallery with name="gallery_images" %}
<div class="product-gallery">
    {% for img_url in gallery %}
        <img src="{{ img_url }}" alt="产品图" />
    {% endfor %}
</div>

3. 利用 archiveParams 标签遍历或按需访问

如果您希望在模板中动态地遍历所有自定义字段及其对应的名称和值,或者需要以键值对的形式直接访问某个自定义字段,archiveParams 标签会是您的好帮手。

默认情况下,archiveParams 标签会返回一个已排序的数组对象,每个元素包含 Name(参数名)和 Value(参数值)。您可以这样循环显示所有自定义字段:

<div class="custom-parameters">
    {% archiveParams params %}
    {% for item in params %}
        <p>{{ item.Name }}:{{ item.Value }}</p>
    {% endfor %}
    {% endarchiveParams %}
</div>

如果您的自定义字段是富文本,别忘了在 {{ item.Value }} 后添加 |safe 过滤器。

此外,您还可以通过设置 sorted=false 来获取一个无序的 map 对象(类似于字典),这样您就可以通过自定义字段的英文名称(即“调用字段”)直接获取其值,而无需循环:

{% archiveParams custom_fields with sorted=false %}
    <p>作者邮箱:{{ custom_fields.author_email.Value }}</p>
    <p>是否推荐:{{ custom_fields.is_featured.Value }}</p>
{% endarchiveParams %}

这种方式在您知道具体要获取哪个自定义字段,并且需要其 Value 属性(或 Name 属性)时,非常方便。

总结与**实践

安企CMS通过其灵活的内容模型和强大的模板标签系统,让自定义模型字段的调用变得直观且高效。在实际操作中:

  • 对于大多数场景,直接通过 {{ archive.your_custom_field_name }} 属性调用是最简洁的选择。
  • 如果自定义字段是富文本内容,请务必使用 |safe 过滤器,例如 {{ archive.rich_text_field|safe }},以防止HTML被转义而无法正常显示。
  • archiveDetail 标签适合需要针对单个字段进行额外处理或赋值的情况。
  • archiveParams 标签则非常适合需要动态展示所有自定义字段,或以键值对形式按调用字段名快速访问特定值的场景。